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

Testing Mocha/supertest/expect MEAN-stack HTTP Request 4 seconds delay done

我正在使用 Mocha/supertest/expect 库在 MEAN-Stack 中测试 HTTP 请求,需要 4 秒才能到达 return:

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 请求完成后最后执行 "done" 回调。但我收到错误消息:

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. 

我认为它适用于未嵌套的期望调用。我将如何在其他期望调用中使用嵌套的期望调用来做到这一点,就像上面的例子一样?

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

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 调用链导致超时问题,另一种方法是使用 promise 方法。

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

我得到了解决方案,问题是箭头函数的使用:(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",