Tengo una función simple como la siguiente
function foo({ platform }) { if (platform === 'all') { throw new Error('Platform value can only be android or ios'); } return `${platform}`; }Luego escribí pruebas unitarias como se muestra a continuación.
it('should return correct result with platform', () => { expect(foo({ platform: 'ios' })).toBe('ios'); expect(foo({ platform: 'android' })).toBe('android'); expect(foo({platform: 'all'})).toThrow(new Error('Platform value can only be android or ios')); });La prueba realmente falló debido al último caso de prueba sin ninguna información útil
FAIL src/utils/__test__/foo.test.ts ● foo() › should return correct result with platform Platform value can only be android or ios 16 | }) { 17 | if (platform === 'all') { > 18 | throw new Error('Platform value can only be android or ios'); | ^ 19 | } 20 | 21 | return `${platform}`; at xx (src/utils/foo.ts:18:11) También intenté envolver toda la expect con el bloque try catch pero la prueba tampoco está pasando
toThrow solo funciona cuando a expect se le pasa una función sin argumentos que se puede llamar para causar la excepción.
/* this is the only test that needs this */ expect(() => foo({platform: 'all'})).toThrow(); Esto se debe a que JavaScript no admite argumentos de función de aplazamiento automático, por lo que no hay forma de expect "pausar" la evaluación de sus argumentos. Entonces, la API tiene que ser "dame (Jest) una función para llamar y la llamaré cuando esté listo para manejar lo que esa función podría hacer".