MochaJS 设置超时 ES6
MochaJS setTimeout ES6
在对我的 Node.js 应用程序进行单元测试时,我在使用 setTimeout
时遇到了 Mocha 和 ES6 问题。
Mocha 说测试通过了,但是当我输入其他东西(检查测试,确保它有效)时,它仍然说它通过了,而它应该会失败。
代码:
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
的回调中尝试了箭头函数或标准函数,但它在 yield 上崩溃了。 (Unexpected token)
checkToken
是生成器函数。
使用:
- Nodejs v4.2.1
- Co v4.6.0
- 应v7.1.0
- Mocha v2.3.3
您不能将 setTimeout
与生成器一起使用。它是您传递给 co.wrap
的生成器,它将是 运行 异步的,并且 它 需要知道超时。您将需要 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");
}));
在对我的 Node.js 应用程序进行单元测试时,我在使用 setTimeout
时遇到了 Mocha 和 ES6 问题。
Mocha 说测试通过了,但是当我输入其他东西(检查测试,确保它有效)时,它仍然说它通过了,而它应该会失败。
代码:
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
的回调中尝试了箭头函数或标准函数,但它在 yield 上崩溃了。 (Unexpected token)
checkToken
是生成器函数。
使用:
- Nodejs v4.2.1
- Co v4.6.0
- 应v7.1.0
- Mocha v2.3.3
您不能将 setTimeout
与生成器一起使用。它是您传递给 co.wrap
的生成器,它将是 运行 异步的,并且 它 需要知道超时。您将需要 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");
}));