我正在使用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.
我认为它适用于未嵌套的预期呼叫。像上面的示例一样,我该如何在其他期望调用中嵌套嵌套的期望调用呢?
答案 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",