如果我们有一个my-spec.js单元测试文件,并使用mocha运行:

mocha my-spec.js

默认超时时间为2000毫秒。可以使用命令行参数覆盖部分测试:

mocha my-spec.js --timeout 5000

是否可以为所有测试更改全局默认超时? 即默认超时值将不同于2000 ms当你调用:

mocha my-spec.js

默认情况下,Mocha将读取一个名为test/ Mocha的文件。可包含命令行参数的选项。所以你可以创建这样一个文件,它包含:

--timeout 5000

无论何时在命令行上运行Mocha,它都会读取这个文件,并默认设置5秒的超时。

另一种根据你的情况可能更好的方法是在你的测试文件的顶级描述调用中设置它:

describe("something", function () {
    this.timeout(5000); 

    // tests...
});

这将允许您仅在每个文件的基础上设置超时。

如果您希望全局默认值为5000,但对某些文件设置不同的值,则可以使用这两种方法。


注意,如果要调用这个函数,通常不能使用箭头函数。timeout(或访问Mocha为您设置的任何其他成员)。例如,这通常是行不通的:

describe("something", () => {
    this.timeout(5000); //will not work

    // tests...
});

这是因为箭头函数从函数出现的范围中获取该值。Mocha将调用具有良好值的函数,但该值不会在箭头函数中传递。Mocha的文档在这个主题上说:

不建议将箭头函数(“lambdas”)传递给Mocha。由于它的词法绑定,这样的函数无法访问Mocha上下文。


在当前版本的Mocha中,超时可以像这样全局更改:

mocha.timeout(5000);

只需在测试套件的任何地方添加上面的行,最好是在您的规格说明的顶部或在一个单独的测试助手中。


在旧版本中,并且仅在浏览器中,您可以使用mocha.setup更改全局配置。

mocha.setup({ timeout: 5000 });

文档不涉及全局超时设置,但提供了一些关于如何在其他常见场景中更改超时的示例。


为了完整性,添加这个。如果您(像我一样)在包中使用脚本。Json文件,只需添加——timeout选项mocha:

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},

然后你可以运行npm run test来运行你的测试套件,超时设置为10,000毫秒。


只要添加到正确的答案,你可以像这样用箭头函数设置超时:

it('Some test', () => {

}).timeout(5000)