【问题标题】:Change default timeout for mocha更改 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

【问题讨论】:

标签: javascript unit-testing mocha.js


【解决方案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 中不起作用。见stackoverflow.com/a/47915119/893113。看来 CLI 选项是唯一的方法。
  • 我也不能在浏览器中工作。截至今天,答案中链接的文档未提及任何 timeout 参数。相反,mochajs.org/#timeouts 告诉在测试中插入显式的setTimeout 指令。
  • @MarcoFaustinelli 您误解了文档。 setTimeouts 与 Mocha 无关。它们用于演示超时设置的效果。
猜你喜欢
  • 2011-01-15
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 2019-11-11
  • 2018-11-13
  • 2011-02-04
相关资源
最近更新 更多