更改mocha的默认超时

lm.*_*lm. 144 javascript unit-testing mocha.js

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

mocha my-spec.js
Run Code Online (Sandbox Code Playgroud)

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

mocha my-spec.js --timeout 5000
Run Code Online (Sandbox Code Playgroud)

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

mocha my-spec.js
Run Code Online (Sandbox Code Playgroud)

默认超时值不同于2000毫秒提前感谢

Lou*_*uis 269

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

--timeout 5000
Run Code Online (Sandbox Code Playgroud)

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

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

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

    // tests...
});
Run Code Online (Sandbox Code Playgroud)

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

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


请注意,如果要打电话this.timeout(或访问this该Mocha集的任何其他成员),通常不能使用箭头功能.例如,这通常不起作用:

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

    // tests...
});
Run Code Online (Sandbox Code Playgroud)

这是因为箭头函数this取自函数出现的范围.Mocha将调用具有良好值的函数,this但该值不会在箭头函数内传递.Mocha的文档就此主题说:

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

  • @JeffLowery您使用的是箭头功能吗?箭头函数不会建立一个新的`this`,这通常会导致`this.timeout`失败,就像你在评论中显示的那样. (6认同)
  • @JeffLowery 使用常规的“function ()”。Mocha 传递的“this”实际上是内部状态。我确信,如果您摆弄代码,您将能够编写设置所需超时并使用箭头函数的代码,但这将是一种脆弱的方法。我编辑了我的答案来讨论箭头函数。 (3认同)
  • 感谢您提供信息。但我尝试修改mocha.opts文件,但并不影响。 (2认同)
  • 你是在正确的地方创造的吗?Mocha非常关注它想要这个文件的位置.如果你在`/ home/me/src/proj /`中运行Mocha,那么Mocha将搜索这个文件:`/ home/me/src/proj/test/mocha.opts` (2认同)

Den*_*nis 49

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

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

}).timeout(5000)
Run Code Online (Sandbox Code Playgroud)

  • 问题是"为所有测试全局更改默认超时".你的答案只改变一个测试.`describe('suite',()=> {...}).timeout(5000)`不起作用. (6认同)
  • @MarcoFaustinelli 你误解了文档。setTimeouts 与 Mocha 无关。它们的作用是演示超时设置的效果。 (3认同)

Fre*_*Ben 31

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

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},
Run Code Online (Sandbox Code Playgroud)

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


GOT*_*O 0 24

如果您(像我一样)在浏览器而不是服务器上运行Mocha,您始终可以使用更改全局配置mocha.setup.

mocha.timeout(5000);
Run Code Online (Sandbox Code Playgroud)

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

以下是文档链接,其中包含一些示例,说明如何在浏览器中配置Mocha.

  • 这在Node中不起作用.请参阅/sf/answers/3354058361/.似乎CLI选项是唯一的方法. (5认同)