Javascript 更改摩卡咖啡的默认超时

Javascript 更改摩卡咖啡的默认超时,javascript,unit-testing,mocha.js,Javascript,Unit Testing,Mocha.js,如果我们有一个单元测试文件my-spec.js并与mocha一起运行: mocha my-spec.js 默认超时为2000毫秒。可以使用命令行参数覆盖部分测试的超时: mocha my-spec.js --timeout 5000 是否可以全局更改所有测试的默认超时? i、 e.默认超时值将不同于您调用时的2000毫秒: mocha my-spec.js 默认情况下,Mocha将读取名为test/Mocha.opts的文件,该文件可以包含命令行参数。因此,您可以创建这样一个文件,其中包含

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

mocha my-spec.js
默认超时为2000毫秒。可以使用命令行参数覆盖部分测试的超时:

mocha my-spec.js --timeout 5000
是否可以全局更改所有测试的默认超时? i、 e.默认超时值将不同于您调用时的2000毫秒:

mocha my-spec.js

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

--timeout 5000
无论何时在命令行上运行Mocha,它都会读取此文件,并默认设置超时5秒

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

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

    // tests...
});
这将允许您仅在每个文件的基础上设置超时

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


请注意,如果要调用
this.timeout
(或访问摩卡为您设置的
this
的任何其他成员),则通常不能使用箭头功能。例如,这通常不起作用:

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

    // tests...
});
这是因为箭头函数从函数出现的范围中获取此。Mocha将为
this
调用具有良好值的函数,但该值不会在arrow函数中传递。摩卡咖啡的文件上写着:

不鼓励向摩卡传递箭头功能(“lambdas”)。由于这个函数的词法绑定,这些函数无法访问Mocha上下文


在当前版本的Mocha中,可以全局更改超时,如下所示:

mocha.timeout(5000);
it('Some test', () => {

}).timeout(5000)
只需在测试套件中的任何位置添加该行,最好是在规范的顶部或单独的测试助手中


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

mocha.setup({ timeout: 5000 });


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

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

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

然后,您可以运行
npm run test
运行测试套件,超时设置为10000毫秒。

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

mocha.timeout(5000);
it('Some test', () => {

}).timeout(5000)

谢谢你的信息。但我试图修改mocha.opts文件,但它不会影响。您是否在正确的位置创建了它?Mocha非常明确地说明了它想要这个文件的位置。如果您在
/home/me/src/proj/
中运行Mocha,那么Mocha将搜索此文件:
/home/me/src/proj/test/Mocha.opts
,非常感谢。现在更改影响了此。超时(10000);//默认超时^TypeError:this.timeout不是套件中的函数。(/Users/jeff.l/Documents/workspace/unittests/mocha-chai_tests/checkoutTest.js:12:10)@JeffLowery您使用的是箭头函数吗?箭头函数不会建立新的
this
,这通常会导致
this。超时
失败,正如您在评论中所示。Mocha's还对此进行了更多解释。如果有人感兴趣,大多数IDE还允许您为测试执行注入Mocha选项;e、 g.对于WebStorm,您可以在Run->Edit Configuration->Extra Mocha Options(运行->编辑配置->额外的摩卡选项)下输入此值(即“-timeout 10000”)。问题是“全局更改所有测试的默认超时”。你的答案只改变了一个测试<代码>描述('suite',()=>{…})。超时(5000)不起作用。与前面的答案一样,建议的解决方案目前无效。告诉我在测试中插入显式的
setTimeout
指令。这对我来说很有效mocha@5(针对特定测试)@MarcoFaustinelli你误解了文档。设置超时与摩卡咖啡无关。它们用于演示超时设置的效果。这在节点中不起作用。看见似乎CLI选项是唯一的方法。我也不在浏览器中工作。截至今天,答案中链接的文档未提及任何
timeout
参数。相反,告诉您在测试中插入显式的
setTimeout
指令。@MarcoFaustinelli您误解了文档。设置超时与摩卡咖啡无关。它们用于演示超时设置的效果。