如果我们有一个单元测试文件 my-spec.js 并使用 mocha 运行:
mocha my-spec.js
默认超时为 2000 毫秒。可以使用命令行参数覆盖部分测试:
mocha my-spec.js --timeout 5000
是否可以全局更改所有测试的默认超时?即当您调用时,默认超时值将与 2000 毫秒不同:
mocha my-spec.js
如果我们有一个单元测试文件 my-spec.js 并使用 mocha 运行:
mocha my-spec.js
默认超时为 2000 毫秒。可以使用命令行参数覆盖部分测试:
mocha my-spec.js --timeout 5000
是否可以全局更改所有测试的默认超时?即当您调用时,默认超时值将与 2000 毫秒不同:
mocha my-spec.js
默认情况下,Mocha 将读取一个名为的文件test/mocha.opts
,该文件可以包含命令行参数。因此,您可以创建这样一个包含以下内容的文件:
--timeout 5000
每当您在命令行运行 Mocha 时,它都会读取此文件并默认设置 5 秒的超时时间。
根据您的情况,另一种可能更好的方法是describe
在测试文件的顶级调用中像这样设置它:
describe("something", function () {
this.timeout(5000);
// tests...
});
这将允许您仅在每个文件的基础上设置超时。
如果您想要全局默认值 5000,但为某些文件设置不同的内容,则可以使用这两种方法。
请注意,如果您要调用this.timeout
(或访问this
Mocha 设置的任何其他成员),通常不能使用箭头函数。例如,这通常不起作用:
describe("something", () => {
this.timeout(5000); //will not work
// tests...
});
这是因为箭头函数this
从函数出现的作用域中获取。Mocha 将调用具有良好值的函数,this
但该值不会在箭头函数内部传递。Mocha 的文档在这个主题上说:
不鼓励将箭头函数(“lambdas”)传递给 Mocha。由于 this 的词法绑定,此类函数无法访问 Mocha 上下文。
只需添加到正确答案中,您就可以使用箭头功能设置超时,如下所示:
it('Some test', () => {
}).timeout(5000)
添加这个是为了完整性。如果您(像我一样)在package.json
文件中使用脚本,只需将--timeout
选项添加到 mocha:
"scripts": {
"test": "mocha 'test/**/*.js' --timeout 10000",
"test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},
然后您可以运行npm run test
您的测试套件,并将超时设置为 10,000 毫秒。
在当前版本的 Mocha 中,超时可以像这样全局更改:
mocha.timeout(5000);
只需在测试套件的任何位置添加上面的行,最好在规范的顶部或单独的测试助手中。
在旧版本中,并且仅在浏览器中,您可以使用mocha.setup
.
mocha.setup({ timeout: 5000 });
该文档不包括全局超时设置,但提供了一些关于如何在其他常见场景中更改超时的示例。