更改Mocha的默认超时


160

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

mocha my-spec.js

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

mocha my-spec.js --timeout 5000

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

mocha my-spec.js

Mocha的官方网站也对此进行了详细说明。
RaviRokkam 2015年

Answers:


303

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

--timeout 5000

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

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

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

    // tests...
});

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

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


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

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

    // tests...
});

这是因为arrow函数this从出现该函数的作用域中获取内容。Mocha会调用具有适当值的函数,this但该值不会在arrow函数内部传递。Mocha的文档说明了以下主题

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


1
感谢您提供信息。但是我试图修改mocha.opts文件,但是并没有影响。
lm。

2
您是否在正确的位置创建了它?Mocha非常详细地说明了该文件的位置。如果您在其中运行Mocha,/home/me/src/proj/则Mocha将搜索以下文件:/home/me/src/proj/test/mocha.opts
路易(Louis)

非常感谢 。现在更改已受影响
lm。

this.timeout(10000); //默认超时^ TypeError:this.timeout不是Suite的函数。<匿名>(/Users/jeff.l/Documents/workspace/unit
杰夫Lowery

6
@JeffLowery您正在使用箭头功能吗?箭头函数不会建立new this,这通常会导致this.timeout失败,就像您在注释中显示的那样。
路易斯

62

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

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

}).timeout(5000)

7
问题是“为所有测试全局更改默认超时”。您的答案只会更改一项测试。describe('suite', () => {...}).timeout(5000)不起作用。
aleung

与前面的答案一样,提出的解决方案目前无效。mochajs.org/#timeouts告诉您setTimeout在测试中插入明确的指令。
Marco Faustinelli,

这对我来说适用于mocha @ 5(用于特定测试)
Fernando Gabrieli

@MarcoFaustinelli您误解了文档。setTimeouts与摩卡无关。它们在那里演示超时设置的效果。
oligofren

33

添加此内容是为了完整性。如果您(像我一样)在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,您可以在“运行”->“编辑配置”->“附加Mocha选项”下输入此值(即“ --timeout 10000”)。
Rubicon

25

在当前版本的Mocha中,可以按以下方式全局更改超时:

mocha.timeout(5000);

只需在测试套件中的任何位置(最好在规范顶部或单独的测试助手中)的上方添加该行即可。


在较旧的版本中,只有在浏览器中,才可以使用更改全局配置mocha.setup

mocha.setup({ timeout: 5000 });

文档未涵盖全局超时设置,但提供了一些有关在其他常见情况下如何更改超时的示例。


5
这在Node中不起作用。请参阅stackoverflow.com/a/47915119/893113。看来CLI选项是唯一的方法。
paulmelnikow

我也不在浏览器中工作。截至今天,答案中链接的文档尚未提及任何timeout参数。相反,mochajs.org/#timeouts告诉您setTimeout在测试中插入明确的指令。
Marco Faustinelli,

@MarcoFaustinelli您误解了文档。setTimeouts与摩卡无关。它们在那里演示超时设置的效果。
oligofren
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.