Yani, olay yayıcıya dayanan bir bileşeni test ediyorum. Bunu yapmak için Mocha + Chai ile Promises'i kullanarak bir çözüm buldum:
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();
});
});
Reddetme işlevi anında 'AssertionError: Promise error' mesajını gösterdiği için çağrılmasına rağmen konsolda bir 'UnhandledPromiseRejectionWarning' alıyorum
(düğüm: 25754) UnhandledPromiseRejectionWarning: İşlenmemiş söz reddi (ret id: 2): AssertionError: Promise error: beklenen {Object (message, showDiff, ...)} hatalı 1) doğru olayla geçiş yapmalı
Ve sonra, 2 saniye sonra
Hata: 2000 ms'lik zaman aşımı aşıldı. Bu testte done () geri aramasının çağrıldığından emin olun.
Bu, yakalama geri çağrısı yürütüldüğünden beri daha da tuhaf. (Sanırım bazı nedenlerden dolayı iddia hatası yürütmenin geri kalanını engelledi)
Şimdi komik olan şey, eğer yorum yaparsam assert.isNotOk(error...)
, konsolda herhangi bir uyarı olmadan test iyi çalışır. Yakalama işlemini gerçekleştirmesi anlamında hala "başarısız" oluyor.
Ama yine de bu hataları sözle anlayamıyorum. Biri beni aydınlatabilir mi?