Tengo esta función que devuelve una promesa y falla cuando se llama:
export const mockAsync = () => { return new Promise((_, reject) => { setTimeout(() => reject(new Error('Error')), 50); }); };Y tengo esta prueba, que está pasando:
describe('mockAsync', () => { test('it should throw if we ask for it', async () => { const result = mockAsync(); await expect(result).rejects.toThrow('Error'); }); }); Pero lo encuentro extraño, esperaría que llamara await antes de la llamada a la función:
describe('mockAsync', () => { test('it should throw if we ask for it', async () => { const result = await mockAsync(); expect(result).rejects.toThrow('Error'); }); });Este último no está pasando, y no puedo entender por qué. ¿No es la sintaxis correcta?
Para probar el trabajo que desea que la promesa sea rechazada dentro del contexto de la expectativa. por eso solemos escribirlo así:
await expect(/*sync function call*/).rejects.toThrow('someError')Y en tu ejemplo particular:
describe('mockAsync', () => { test('it should throw if we ask for it', async () => { await expect(mockAsync()).rejects.toThrow('Error') }) })Si desea utilizar el enfoque Try/Catch, simplemente detecte el error y asegúrese de que sea el esperado:
describe('mockAsync', () => { test('it should throw if we ask for it', async () => { try{ await mockAsync() } catch(err){ expect(err.message).toEqual('Error') } }) })