它永远不会打到内部调用,所以done()
没有被调用,我的摩卡测试超时。这是为什么?
testUsers.forEach(function(loggedInUser) {
var describeStr;
if (loggedInUser && loggedInUser.username === 'a') {
describeStr = 'Tangos API (role: user)';
}
else if (loggedInUser && loggedInUser.username === 'admin') {
describeStr = 'Tangos API (role: admin)';
}
else {
describeStr = 'Tangos API (not logged in)';
}
describe(describeStr, function() {
var id;
beforeEach(function(done) {
if (!loggedInUser) {
return done();
}
agent
.post('/users')
.send(loggedInUser)
.end(function(err, res) {
console.log('err: ', err); // null
console.log('res.text: ', res.text); // correct
agent
.post('/tangos')
.send(testTango)
.end(function(err, result) {
console.log('inner'); // never hits here
if (err) {
return done(err);
}
return done(); // never hits here, so mocha tests time out
})
;
})
;
});
使用async也不起作用:
async.series([
function() {
agent
.post('/users')
.send(loggedInUser)
.end(function(err, res) {
console.log('err: ', err); // null
console.log('res.text: ', res.text); // correct
})
;
}, function() {
agent
.post('/tangos')
.send(testTango)
.end(function(err, result) {
console.log('inner'); // never hits here
})
;
}
], done);
答案 0 :(得分:1)
我在这里看到2个可能的问题。首先,您的异步系列缺少每个函数所需的回调。
async.series([
function(callback) {
agent
.post('/users')
.send(loggedInUser)
.end(function(err, res) {
console.log('err: ', err); // null
console.log('res.text: ', res.text); // correct
callback(); // Need to call the callback here.
})
;
}, function(callback) {
agent
.post('/tangos')
.send(testTango)
.end(function(err, result) {
console.log('inner'); // never hits here
callback(); // Need to call callback here too.
})
;
}
], done);
我用自己的端点运行了这个精确的测试,它运行正常。
第一个代码片段看起来没问题,对我来说效果很好。我冒昧地说,在你有机会完成之前你已经超时了。默认情况下,超时为2000毫秒。 2个API调用在2秒内没有完成是有意义的。要增加超时,只需输入
即可this.timeout(5000);
在describe块中增加超时值。