在对我的Node.js应用进行单元测试时,我在使用setTimeout
时遇到了Mocha和ES6的问题。
代码:
describe('.checkToken', function () {
let user = {};
let token = repository.newToken();
it('token has expired', co.wrap(function* () {
setTimeout(function* () {
let result = yield repository.checkToken(user, token.token);
result.body.should.have.property("error");
}, 1000)
}));
});
});
其他测试都有效,在这种情况下没有问题。
我已经在setTimeout
的回调中尝试过箭头函数或标准函数,但它会在收益率上崩溃。 (Unexpected token)
checkToken
是一个生成器函数。
使用:
答案 0 :(得分:3)
您不能将setTimeout
与生成器一起使用。它是传递给co.wrap
的生成器,它将异步运行, it 需要知道超时。您需要yield
超时(作为yieldable,如thunk或promise):
it('token has expired', co.wrap(function* () {
yield new Promise(resolve => { setTimeout(resolve, 1000); });
let result = yield repository.checkToken(user, token.token);
result.body.should.have.property("error");
}));