NodeJS UnhandledPromiseRejectionWarning

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'

(noeud:25754) UnhandledPromiseRejectionWarning: non Gérée promesse
rejet (rejet de l'id: 2): AssertionError: la Promesse d'erreur: attendu
{ Objet (message, showDiff, ...) } pour être falsy
1) si la transition avec l'événement correct

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.

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 le 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?

  • Je pense que vous avez un jeu supplémentaire de l'accolade de fermeture et de parens, à la dernière ligne. Supprimez-les et essayez à nouveau.
  • C'est trop cool, le nouveau non gérée rejet d'avertissement trouve des bugs dans la vraie vie et sauve des gens de temps. Tellement gagner ici. Sans cet avertissement, vos tests aurait expiré sans aucune explication.
InformationsquelleAutor Jzop | 2016-09-27