Donc, je vais tester un composant qui s'appuie sur un événement de l'émetteur. Pour ce faire, je suis venu avec une solution à l'aide de Promesses avec Moka+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();
});
});
});
Sur la console, j'obtiens un "UnhandledPromiseRejectionWarning" même si la rejeter fonction est appelé, car il montre instantanément le message "AssertionError: la Promesse d'erreur'
(node:25754) UnhandledPromiseRejectionWarning: non Gérée promesse rejet (rejet de l'id: 2): AssertionError: la Promesse d'erreur: { Objet (message, showDiff, ...) } pour être falsy 1) si la transition avec le bon événement
Et puis, au bout de 2 sec je obtenir
Erreur: délai d'attente de 2000ms dépassé. Assurer la done() rappel est appelé dans ce test.
Ce qui est encore plus étrange depuis la capture de rappel a été exécuté.(Je pense que pour certaines raison de l'affirmer échec empêché le reste de l'exécution)
Maintenant, le plus drôle, si j'en commentaire l' assert.isNotOk(error...)
le test se passe bien avec tout d'avertissement dans la console. Il stills "échoue", dans le sens qu'elle exécute l'attraper.
Mais encore, je ne peux pas comprendre ces erreurs avec la promesse. Quelqu'un peut-il m'éclairer?