如何增加摩卡单个testing用例的超时

我在一个testing用例中提交了一个networking请求,但是这有时需要超过2秒(默认超时)。

如何增加单个testing用例的超时时间?

在这里你去: http : //mochajs.org/#test-level

it('accesses the network', function(done){ this.timeout(500); [Put network code here, with done() in the callback] }) 

对于箭头function使用如下:

 it('accesses the network', (done) => { [Put network code here, with done() in the callback] }).timeout(500); 

如果你想使用es6箭头函数,你可以在你的定义结尾添加一个.timeout(ms)

 it('should not timeout', (done) => { doLongThing().then(() => { done(); }); }).timeout(5000); 

至less这在Typescript中起作用。

(因为我今天遇到这个)

使用ES2015胖箭头语法时要小心:

这将失败:

 it('accesses the network', done => { this.timeout(500); // will not work // *this* binding refers to parent function scope in fat arrow functions! // ie the *this* object of the describe function done(); }); 

编辑:为什么失败:

正如@atoth在评论中提到的, 胖箭头函数没有自己的绑定。 因此,it函数不可能绑定到这个callback函数,并提供一个超时函数。

底线 :不要将箭头函数用于需要增加超时的函数。

从命令行:

 mocha -t 100000 test.js 

您也可以考虑采用不同的方法,并用存根或模拟对象replace对networking资源的调用。 使用Sinon ,您可以将应用程序从networking服务中分离出来,专注于您的开发工作。

如果您在NodeJS中使用,那么您可以在package.json中设置超时

 "test": "mocha --timeout 10000" 

那么你可以像使用npm一样运行:

 npm test 

Express上进行testing:

 const request = require('supertest'); const server = require('../bin/www'); describe('navegation', () => { it('login page', function(done) { this.timeout(4000); const timeOut = setTimeout(done, 3500); request(server) .get('/login') .expect(200) .then(res => { res.text.should.include('Login'); clearTimeout(timeOut); done(); }) .catch(err => { console.log(this.test.fullTitle(), err); clearTimeout(timeOut); done(err); }); }); }); 

在这个例子中,testing时间是4000(4s)。

注意: setTimeout(done, 3500)比testing时间内调用的次数要less,但是clearTimeout(timeOut)会比以前使用的时间less。

好吧,我使用TypeScript和使用asynchronous/等待。 这是我的问题:

  • 我以为我必须使用箭头function来处理asynchronous/等待
  • it().timeout()似乎不起作用,(types问题)

带我一边认识到,当你回诺言,摩卡将等待testing正确。

 it("Should not timeout", function(){ this.timeout(5000); return new Promise((resolve, reject) => { }) })