测试Mocha / supertest / expect MEAN-stack HTTP请求已完成4秒延迟

时间:2018-10-26 09:42:10

标签: asynchronous testing mocha supertest

我正在使用Mocha / supertest / expect库在MEAN-Stack中测试一个HTTP请求,需要4秒钟才能返回:

it('should return product data', (done) => {
    request(app)
    .get('/P/Product')
    .expect(200)
    .expect((res) => {
        expect(res.body[0]._id).toEqual('123456789')
    })
    .end(done);
});

该函数应在HTTP请求完成后最后执行“完成”回调。但是我遇到了错误:

1) should return product data:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a
Promise, ensure it resolves. 

我认为它适用于未嵌套的预期呼叫。像上面的示例一样,我该如何在其他期望调用中嵌套嵌套的期望调用呢?

2 个答案:

答案 0 :(得分:2)

也许请求的响应时间太长,导致Mocha的默认2秒测试超时发生。可能尝试从CLI到URL的cURL来查看您返回或mocha test time threshold进行测试的时间。

RUN pip install virtualenv
RUN virtualenv virtual
RUN /bin/bash -c "source /virtual/bin/activate"

如果您认为describe('testing', function() { // This applies the timeout of 5 seconds to each test. this.timeout(5000); it('should return product data', function() { // This applies a timeout of 5 seconds for this test only this.timeout(5000); request(app) .get('/P/Product') .expect(200) .expect((res) => { expect(res.body[0]._id).toEqual('123456789') }) .end(done); }); }); 调用链导致超时问题,则可以使用诺言方法。

expect

答案 1 :(得分:-1)

我找到了解决方案,问题是使用箭头功能:(done)=>{...},而不是正常的回调,它的工作原理是这样的:

it('should async square a number', function(done) {  
    this.timeout(2005);
    utils.asyncSquare(5, (res) => {
      expect(res).toBe(25).toBeA('number');
      done();
    });
  });

或在包测试脚本中全局设置超时时也可以使用:

"test": "mocha --timeout 3000 **/*.test.js",