更改mocha的默认超时

时间:2014-05-06 10:23:18

标签: javascript unit-testing mocha

我有以下问题 如果我们有单元测试文件my-spec.js并使用mocha运行:

mocha my-spec.js

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

mocha my-spec.js --timeout 5000

问题是: 是否可以全局更改所有测试的默认超时? 即你打电话时

mocha my-spec.js

默认超时值与2000毫秒不同 提前致谢

4 个答案:

答案 0 :(得分:233)

默认情况下,Mocha将读取一个名为test/mocha.opts的文件,该文件可以包含命令行参数。因此,您可以创建包含以下内容的文件:

--timeout 5000

每当您在命令行运行Mocha时,它将读取此文件并默认设置为5秒的超时。

根据您的具体情况,另一种可能更好的方法是在测试文件的顶级describe调用中将其设置为这样:

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

    // tests...
});

这将允许您仅基于每个文件设置超时。

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


请注意,如果要打电话给this.timeout(或访问Mocha为您设置的this的任何其他成员),通常不能使用箭头功能。例如,通常不起作用

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

    // tests...
});

这是因为箭头函数从函数出现的作用域中取this .Mocha将调用具有this的良好值的函数,但该值不会在箭头函数内传递。 Mocha的文档在this topic上说:

  

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

答案 1 :(得分:33)

只需添加正确的答案,您可以使用箭头功能设置超时,如下所示:

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

}).timeout(5000)

答案 2 :(得分:27)

添加此内容以获得完整性。如果您(像我一样)在package.json文件中使用脚本,只需将--timeout选项添加到mocha:

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

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

答案 3 :(得分:22)

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

mocha.timeout(5000);

只需在测试套件的任何位置添加上面的行,最好是在规范的顶部或单独的测试助手中。

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

mocha.setup({ timeout: 5000 });

documentation未涵盖全局超时设置,但提供了一些有关如何在其他常见方案中更改超时的示例。