Estoy tratando de implementar algunas pruebas asincrónicas usando bromas y solo devoluciones de llamada. Me las arreglé para hacer este código, que espero que sea correcto (pasa la prueba):
test('Test the then() clause', function (done) { expect.assertions(1); const result = generate(); new Promise(function (resolve, reject) { setTimeout(function () { resolve(result); }, 100); }).then((data) => { expect(data).toBe(result); done(); }); });Pero estoy atascado tratando de crear una prueba cuando espero detectar un error, así:
test('Test unhandled promise rejection', function (done) { expect.assertions(1); try { new Promise(function (resolve, reject) { setTimeout(function () { reject('errorrrrr'); }, 100); }); } catch (error) { console.log(error); done(); } });¿Que estoy haciendo mal?
EDITAR: si desea hacer esto con una devolución de llamada, simplemente deshágase de la prueba/captura
test('Test unhandled promise rejection', function (done) { new Promise(function (resolve, reject) { setTimeout(function () { reject('errorrrrr'); }, 100); }).catch(() => { console.log(error); done(); }); });Debe esperar la promesa, de lo contrario no arroja
test('Test unhandled promise rejection', async function (done) { expect.assertions(1); try { await new Promise(function (resolve, reject) { setTimeout(function () { reject('errorrrrr'); }, 100); }); } catch (error) { console.log(error); done(); } });Entonces, es simplemente más fácil (OMI) omitir las devoluciones de llamada y usar resoluciones/rechazos
test('Test unhandled promise rejection', async () => { await expect(new Promise(function (resolve, reject) { setTimeout(function () { reject('errorrrrr'); }, 100); }).rejects.toMatch('errorrrrr') });