这是目前的测试:
describe('/POST Register Page', function() {
it('it should register new user', function(/*done*/) {
chai.request(server)
.post('/auth/register')
.send(new_user_data)
.end(function(res) {
expect(res).to.have.status(2017);
// done();
})
})
})
我检查过的最后一个,没有http代码2017
,但它仍然通过:
Registration
Get register page
GET /auth/register 200 6.989 ms - 27
✓ it should get register page
/POST Register Page
✓ it should register new user
2 passing (147ms)
我想发布一些内容,然后回复一下,然后回复一下。
如果我包含done()
,我会收到超时错误:
1) Registration /POST Register Page it should register new user:
Error: Timeout of 3000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
我无法得到任何工作,无论是错还是正确,测试都会通过。
虽然此get请求按预期传递:
describe('Get register page', function() {
it('it should get register page', function(done) {
chai.request(server)
.get('/auth/register')
.end(function(err, res) {
expect(err).to.be.null;
expect(res).to.have.status(200);
done();
})
})
})
我是mocha-chai-chai-http的新手,到目前为止的经验很奇怪。
感谢。
答案 0 :(得分:1)
您的POST请求可能需要超过3秒才能完成,因此mocha会抛出超时错误。
您可以尝试将超时设置为更大的值,如:
describe('/POST Register Page', function() {
// timeout in milliseconds
this.timeout(15000);
// test case
it('it should register new user', function(done) {
chai.request(server)
.post('/auth/register')
.send(new_user_data)
.end(function(res) {
expect(res).to.have.status(200);
done();
})
})
})
通过一些试验,您可以找出在测试中设置的最佳超时值。
当您不使用done()
回调时,mocha只是跳过断言而不等待实际响应到达。由于.end()
块中的断言永远不会被执行,因此mocha在没有断言的情况下通过了测试。当我第一次开始使用TDD时,我遇到了类似的问题,我从中学到了很难的方法。
因为end函数被传递回调,所以运行断言 异步。因此,必须使用一种机制来通知 测试回调已完成的框架。否则,测试 将在检查断言之前通过。