更改 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 的默认超时的主要内容,如果未能解决你的问题,请参考以下文章
spring boot 2.2中默认的rest api超时是啥
是否有 .mocha 文件可以在其中指定默认值,例如 --no-colors?