450

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

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

4

8 回答 8

716

给你: 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);
于 2013-04-13T00:36:40.043 回答
146

如果您希望使用 es6 箭头函数,您可以在定义.timeout(ms)的末尾添加 a it

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

至少这在 Typescript 中有效。

于 2016-03-28T06:28:12.447 回答
75

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

使用 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 在评论中提到的那样,胖箭头函数没有自己的this绑定。因此, it函数不可能绑定到回调的this并提供超时函数。

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

于 2016-02-14T22:32:25.067 回答
57

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

"test": "mocha --timeout 10000"

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

npm test
于 2017-05-14T07:49:34.600 回答
24

从命令行:

mocha -t 100000 test.js
于 2016-02-03T14:16:36.383 回答
17

您可能还考虑采用不同的方法,并将对网络资源的调用替换为存根或模拟对象。使用Sinon,您可以将应用程序与网络服务解耦,专注于您的开发工作。

于 2013-11-14T13:39:22.177 回答
12

对于测试导航Express

const request = require('supertest');
const server = require('../bin/www');

describe('navigation', () => {
    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)它一直避免使用。

于 2017-11-12T03:38:02.823 回答
10

这对我有用!找不到任何东西可以使它与 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 
});
于 2019-10-18T15:20:19.103 回答