如何在mocha中增加单个测试用例的超时

时间:2013-04-12 12:15:11

标签: mocha

我在测试用例中提交网络请求,但有时需要超过2秒(默认超时)。

如何增加单个测试用例的超时?

8 个答案:

答案 0 :(得分:619)

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

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

对于箭头功能使用如下:

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

答案 1 :(得分:125)

如果您想使用es6箭头功能,可以在.timeout(ms)定义的末尾添加it

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

至少这适用于手稿。

答案 2 :(得分:68)

(因为我今天碰到了这个)

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

这将失败:

it('accesses the network', done => {

  this.timeout(500); // will not work

  // *this* binding refers to parent function scope in fat arrow functions!
  // i.e. the *this* object of the describe function

  done();
});

编辑:为何失败:

正如@atoth在评论中提到的那样,胖箭函数没有自己的绑定。因此, it 函数无法绑定到回调的并提供超时功能。

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

答案 3 :(得分:38)

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

"test": "mocha --timeout 10000"

然后您可以使用npm运行,如:

npm test

答案 4 :(得分:20)

从命令行:

mocha -t 100000 test.js

答案 5 :(得分:16)

您可能还会考虑采用不同的方法,并使用存根或模拟对象替换对网络资源的调用。使用Sinon,您可以将应用与网络服务分离,重点关注您的开发工作。

答案 6 :(得分:7)

对于Express上的测试navgation:

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);
            });
    });
});

在示例中,测试时间为4000(4s)。

注意:setTimeout(done, 3500)是次要的,因为done在测试时被调用,但clearTimeout(timeOut)避免使用所有这些时间。

答案 7 :(得分:0)

这对我有用!找不到任何可以与before()配合使用的东西

describe("When in a long running test", () => {
  it("Should not time out with 2000ms", async () => {
    let service = new SomeService();
    let result = await service.callToLongRunningProcess();
    expect(result).to.be.true;
  }).timeout(10000); // Custom Timeout 
});