Usando el marco de jest , ¿cómo puedo verificar que mi función asíncrona arroje algo más que un Error ?
En mis ejemplos a continuación, el primero funciona como se esperaba, ya que la función que se está probando arroja un Error . El segundo ejemplo, donde la función arroja una string , no funciona, jest no verifica que la función arroja.
// Works as expected test('verify error thrown', async () => { const expected = new Error('actual-error'); const fn = async () => { throw expected; }; await expect(fn()).rejects.toThrow(expected); }); // Fails with: Received function did not throw test('verify non-error thrown', async () => { const expected = 'non-error'; const fn = async () => { throw expected; }; await expect(fn()).rejects.toThrow(expected); });No creo que necesites 'rechazos' en ninguno de los dos casos. De acuerdo con los documentos , no está claro si el método toThrow espera que los resultados se deriven de Error . Hay una forma de expresión regular que podría validar contra una cadena.
rejects dice que desenvuelve el rechazo para que pueda coincidir, y eso podría darte la cadena de mensaje de error de Error , o una cadena si el resultado fue una cadena.
El punto de Dave era absolutamente correcto; usar rejects.toThrow no era la forma correcta de hacerlo aquí.
En cambio, logré verificar el comportamiento esperado simplemente detectando el error y verificando su valor.
test('verify non-error thrown', async () => { const expected = 'non-error'; const fn = async () => { throw expected; }; await fn().catch(error => expect(error).toStrictEqual(expected)); expect.assertions(1); }); Tenga en cuenta que expect.assertions(1) es importante aquí. Sin esto, si el código que se está probando se actualizó para no arrojar, la prueba aún pasaría.