in

javascript – Obteniendo una UnhandledPromiseRejectionWarning al probar usando mocha / chai

apple touch icon@2

Entonces, estoy probando un componente que se basa en un emisor de eventos. Para hacerlo, se me ocurrió una solución usando Promesas con 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();
  });
});

En la consola recibo un ‘UnhandledPromiseRejectionWarning’ a pesar de que se está llamando a la función de rechazo, ya que muestra instantáneamente el mensaje ‘AssertionError: Promise error’

(nodo: 25754) UnhandledPromiseRejectionWarning: Rechazo de promesa no controlado (id de rechazo: 2): AssertionError: Error de promesa: se esperaba que {Object (message, showDiff, …)} fuera falso

  1. debe hacer la transición con el evento correcto

Y luego, después de 2 segundos, obtengo

Error: se superó el tiempo de espera de 2000 ms. Asegúrese de que se llame a la devolución de llamada done () en esta prueba.

Lo cual es aún más extraño desde que se ejecutó la devolución de llamada de captura (creo que, por alguna razón, el error de aserción impidió el resto de la ejecución)

Ahora lo gracioso, si comento el assert.isNotOk(error...) la prueba funciona bien sin ninguna advertencia en la consola. Aún ‘falla’ en el sentido de que ejecuta la captura.
Pero aún así, no puedo entender estos errores con promesas. ¿Alguien puede iluminarme?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

subnetting

IPv6: división en subredes

db22f442 b5ec 42d6 944e 824371d897eb

Recordando las cartas coleccionables de X-Men Series II de SkyBox