获取未处理的承诺拒绝警告使用摩卡/柴进行测试时
因此,我正在测试一个依赖于事件发射器的组件。为此,我提出了一个使用Mocha + Chai的承诺的解决方案:
it('should transition with the correct event', (done) => {
const cFSM = new CharacterFSM({}, emitter, transitions);
let timeout = null;
let resolved = false;
new Promise((resolve, reject) => {
emitter.once('action', resolve);
emitter.emit('done', {});
timeout = setTimeout(() => {
if (!resolved) {
reject('Timedout!');
}
clearTimeout(timeout);
}, 100);
}).then((state) => {
resolved = true;
assert(state.action === 'DONE', 'should change state');
done();
}).catch((error) => {
assert.isNotOk(error,'Promise error');
done();
});
});
在控制台上,我收到“未处理的PromiseRejectionWarning”,即使拒绝函数被调用,因为它会立即显示消息“AssertionError:Promise error”
(节点:25754)未处理的PromiseRejectionWarning:未处理的 promise拒绝(拒绝id:2):AssertionError:Promise error:expected { Object (message, showDiff, ...) } to be falsy
- 应使用正确的事件进行转换
然后,在2秒后,我得到
错误:超时超过 2000 毫秒。确保在此测试中调用 done() 回调。
自从执行 catch 回调以来,这甚至更奇怪(我认为由于某种原因,断言失败阻止了其余的执行)
现在有趣的是,如果我注释掉测试,测试运行良好,在控制台中没有任何警告。它仍然“失败”,因为它执行捕获。
但是,我仍然无法理解这些错误。有人能启发我吗?assert.isNotOk(error...)