我正在与Mocha合作,我正在尝试测试我正在构建的API。
我无法理解done()
功能的放置位置。
如果我将它放在现在的位置,它不会执行User.findOne()
的回调函数。
如果我将完成放置在User.findOne()
的回调函数的底部,则会创建超时。
我对async和这个完成功能相对较新,所以有人可以帮助解释为什么会发生这两种情况,以及如何修复代码以便它能在Mocha中正确测试?
describe('POST /signup', function() {
before(checkServerIsRunning); // Need to implement
it('create a new user if username is unique', function(done) {
httpReq({
method : 'POST',
url : url + '/signup',
json : true,
body : JSON.stringify({
username : 'test',
first : 'first',
last : 'last' })
},
function (err, res, body) {
if (err) {
done(err);
}
else {
res.statusCode.should.be.equal(201);
User.findOne( { username: 'test' }, function(err, user) {
user.should.have.property('username', 'testy');
user.should.have.property('firstName', 'first');
user.should.have.property('lastName', 'last');
usersToRemove.push(user);
});
done();
}
}
);
});
});
答案 0 :(得分:1)
您应将done()
置于被叫findOne
内。
如果你发现它超时,那么findOne
永远不会调用它的回调(这是一个错误!)或执行时间太长。
在这种情况下,您可以通过在测试开始时粘贴this.timeout(5000)
之类的内容来延长超时(将超时时间增加到5秒)。
一般情况下,你通常不会希望测试速度慢,所以也许可以尝试找出为什么需要这么长的时间。