我有以下问题 如果我们有单元测试文件my-spec.js并使用mocha运行:
mocha my-spec.js
默认超时为2000 ms。可以使用命令行参数覆盖部分测试:
mocha my-spec.js --timeout 5000
问题是: 是否可以全局更改所有测试的默认超时? 即你打电话时
mocha my-spec.js
默认超时值与2000毫秒不同 提前致谢
答案 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未涵盖全局超时设置,但提供了一些有关如何在其他常见方案中更改超时的示例。