更改 mocha 的默认超时

Posted

技术标签:

【中文标题】更改 mocha 的默认超时【英文标题】:Change default timeout for mocha 【发布时间】:2014-06-22 21:50:27 【问题描述】:

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

mocha my-spec.js

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

mocha my-spec.js --timeout 5000

是否可以全局更改所有测试的默认超时? 即当您调用时,默认超时值将不同于 2000 毫秒:

mocha my-spec.js

【问题讨论】:

Mocha 的official website 也对此进行了详细说明。 【参考方案1】:

默认情况下,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); //will not work

    // tests...
);

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

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

【讨论】:

感谢您的信息。但是我尝试修改 mocha.opts 文件,但不影响。 您是否在正确的位置创建了它? Mocha 非常具体地说明了它想要这个文件的位置。如果你在/home/me/src/proj/ 中运行 Mocha,那么 Mocha 会搜索这个文件:/home/me/src/proj/test/mocha.opts 非常感谢。现在变化影响了 @JeffLowery 你在使用箭头函数吗?箭头函数不会建立新的this,这通常会导致this.timeout 失败,就像您在评论中显示的那样。 @JeffLowery 使用普通的function ()。 Mocha 作为this 传递的实际上是内部状态。我敢肯定,如果您摆弄代码,您将能够编写设置所需超时并使用箭头函数的代码,但这将是一种脆弱的方法。我已经编辑了我的答案来讨论箭头函数。【参考方案2】:

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

it('Some test', () => 

).timeout(5000)

【讨论】:

问题是“为所有测试全局更改默认超时”。您的答案只会改变一项测试。 describe('suite', () => ...).timeout(5000) 不起作用。 与上一个答案一样,目前提出的解决方案无效。 mochajs.org/#timeouts 告诉在测试中插入显式 setTimeout 指令。 这对我有用 mocha@5(用于特定测试) @MarcoFaustinelli 您误解了文档。 setTimeouts 与 Mocha 无关。它们用于演示超时设置的效果。【参考方案3】:

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

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

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

【讨论】:

如果有人感兴趣,大多数 IDE 还允许您注入 mocha 选项以执行测试;例如对于 WebStorm,你可以在 Run->Edit Configurations->Extra Mocha Options 下输入这个(即“--timeout 10000”)。【参考方案4】:

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

mocha.timeout(5000);

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


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

mocha.setup( timeout: 5000 );

documentation 不涉及全局超时设置,但提供了一些示例,说明如何在其他常见情况下更改超时。

【讨论】:

这在 Node.js 中不起作用。见***.com/a/47915119/893113。看来 CLI 选项是唯一的方法。 我也不能在浏览器中工作。截至今天,答案中链接的文档未提及任何 timeout 参数。相反,mochajs.org/#timeouts 告诉在测试中插入显式的setTimeout 指令。 @MarcoFaustinelli 您误解了文档。 setTimeouts 与 Mocha 无关。它们用于演示超时设置的效果。

以上是关于更改 mocha 的默认超时的主要内容,如果未能解决你的问题,请参考以下文章

更改 WCF 默认超时

更改 Spring Web 应用程序的默认会话超时

spring boot 2.2中默认的rest api超时是啥

是否有 .mocha 文件可以在其中指定默认值,例如 --no-colors?

NSURLSession sharedSession 默认超时

在mocha测试中调用异步函数如何避免超时错误:超过2000ms的超时