更改 mocha 的默认超时时间

IT技术 javascript unit-testing mocha.js
2021-03-10 02:25:21

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

mocha my-spec.js

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

mocha my-spec.js --timeout 5000

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

mocha my-spec.js
4个回答

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

--timeout 5000

每当您在命令行运行 Mocha 时,它都会读取此文件并默认设置 5 秒的超时时间。

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

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

    // tests...
});

这将允许您仅在每个文件的基础上设置超时。

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


请注意,如果您要调用this.timeout(或访问thisMocha 设置的任何其他成员),通常不能使用箭头函数例如,这通常不起作用

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

    // tests...
});

这是因为箭头函数this从函数出现的作用域中获取。Mocha 将调用具有良好值的函数,this但该值不会在箭头函数内部传递。Mocha 的文档在这个主题上说

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

您是否在正确的位置创建了它?Mocha 非常明确它想要这个文件的位置。如果您在其中运行 Mocha,/home/me/src/proj/那么 Mocha 将搜索此文件:/home/me/src/proj/test/mocha.opts
2021-04-20 02:25:21
@JeffLowery 使用常规的function (). 摩卡传递的this其实是内在状态。我敢肯定,如果你摆弄代码,你就可以编写代码来设置你想要的超时并使用箭头函数,但这将是一种脆弱的方法。我编辑了我的答案来谈论箭头函数。
2021-04-27 02:25:21
谢谢你的信息。但我尝试修改 mocha.opts 文件,但不影响。
2021-04-28 02:25:21
非常感谢 。现在变化影响了
2021-05-06 02:25:21
@JeffLowery 你在使用箭头函数吗?箭头函数不会建立一个 new this,这通常会导致this.timeout像您在评论中显示的那样失败。
2021-05-13 02:25:21

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

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

}).timeout(5000)
这对我有用 mocha@5(用于特定测试)
2021-04-18 02:25:21
与之前的答案一样,所提出的解决方案目前无效。mochajs.org/#timeouts告诉setTimeout在测试中插入明确的指令。
2021-04-29 02:25:21
@MarcoFaustinelli 您误解了文档。setTimeouts 与 Mocha 无关。他们在那里演示超时设置的效果。
2021-05-07 02:25:21
问题是“为所有测试全局更改默认超时”。您的答案只会改变一项测试。describe('suite', () => {...}).timeout(5000)不起作用。
2021-05-08 02:25:21

添加这个是为了完整性。如果您(像我一样)在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”)。
2021-05-10 02:25:21

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

mocha.timeout(5000);

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


在旧版本中,并且仅在浏览器中,您可以使用mocha.setup.

mocha.setup({ timeout: 5000 });

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

我也不在浏览器中工作。截至今天,答案中链接的文档未提及任何timeout参数。相反,mochajs.org/#timeouts告诉setTimeout在测试中插入明确的指令。
2021-04-17 02:25:21
@MarcoFaustinelli 您误解了文档。setTimeouts 与 Mocha 无关。他们在那里演示超时设置的效果。
2021-05-02 02:25:21
这在 Node.js 中不起作用。请参阅stackoverflow.com/a/47915119/893113似乎 CLI 选项是唯一的方法。
2021-05-10 02:25:21