그래서 이벤트 이미 터를 사용하는 구성 요소를 테스트하고 있습니다. 그렇게하기 위해 Mocha + Chai와 함께 Promises를 사용하는 솔루션을 생각해 냈습니다.
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();
});
});
콘솔에 'AssertionError : Promise error'메시지가 즉시 표시되므로 거부 함수가 호출되었지만 'UnhandledPromiseRejectionWarning'이 나타납니다.
(node : 25754) UnhandledPromiseRejectionWarning : 처리되지 않은 약속 거부 (거부 ID : 2) : AssertionError : 약속 오류 : 예상 {개체 (메시지, showDiff, ...)}가 거짓 1 임) 올바른 이벤트로 전환해야 함
그리고 2 초 후
오류 : 시간 초과 2000ms를 초과했습니다. 이 테스트에서 done () 콜백이 호출되고 있는지 확인하십시오.
catch 콜백이 실행 된 이후로 더 이상합니다 (어떤 이유로 든 어설 션 실패로 인해 나머지 실행이 차단되었다고 생각합니다)
이제 재미있는 것은 assert.isNotOk(error...)
콘솔에서 경고없이 테스트가 정상적으로 실행 된다는 것 입니다. 캐치를 실행한다는 의미에서 여전히 '실패'합니다.
그러나 여전히, 나는 이러한 오류를 약속으로 이해할 수 없습니다. 누군가 나를 밝게 할 수 있습니까?