Jadi, saya menguji komponen yang bergantung pada emitor-acara. Untuk melakukannya saya datang dengan solusi menggunakan Janji dengan 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();
});
});
Pada konsol saya mendapatkan 'UnhandledPromiseRejectionWarning' meskipun fungsi tolak dipanggil karena langsung menampilkan pesan 'AssertionError: Promise error'
(simpul: 25754) UnhandledPromiseRejectionWarning: Penolakan janji yang tidak ditangani (id penolakan: 2): AssertionError: Galat janji: diharapkan {Obyek (pesan, showDiff, ...)} menjadi falsy 1) harus beralih dengan kejadian yang benar
Dan kemudian, setelah 2 detik saya dapatkan
Kesalahan: batas waktu 2000 ms terlampaui. Pastikan panggilan balik yang dilakukan () dipanggil dalam tes ini.
Yang bahkan lebih aneh sejak catchbackback dieksekusi. (Saya pikir karena alasan tertentu kegagalan yang gagal mencegah sisa eksekusi)
Nah, yang lucu, jika saya berkomentar assert.isNotOk(error...)
tes ini berjalan dengan baik tanpa ada peringatan di konsol. Masih 'gagal' dalam arti bahwa itu mengeksekusi tangkapan.
Tapi tetap saja, saya tidak bisa memahami kesalahan ini dengan janji. Bisakah seseorang mencerahkan saya?