Espero que mi función arroje un error cuando le falte un argumento.
Entiendo que, cuando intento probar si algo sale de una función, necesito envolverlo.
Como tal, mi prueba se ve así:
describe('FUNCTION: saveImageToS3', () => { let date = new Date("2022-04-06T06:30:59Z"); test('throws error when missing required parameters', () => { expect(() => utils.saveImageToS3(undefined, date)).toThrow(`Missing required parameter for saveImageToS3:`) }) })Mi función se ve así:
exports.saveImageToS3 = async (camId, captureDate ) => { if (!camId || !captureDate) throw new Error(`Missing required parameter for saveImageToS3: ${!camId ? 'camId':''} ${!captureDate ?'captureDate':''}`) } try { /// ... do stuff with s3....// } catch (err) { throw err; } }Cuando voy a ejecutar mi prueba, aparece el siguiente error en la consola:
D:\ruta\apis\lambdas\utils\utils.js:4561 lanza un nuevo error(`Falta el parámetro requerido para saveImageToS3: ${!camId ? ^
Error: Falta el parámetro requerido para saveImageToS3: camId en Object..exports.saveImageToS3 (D:ruta\apis\lambdas\utils\utils.js:81:9) en saveImageToS3 (D:\ruta\apis\lambdas\utils\utils .test.js:71:23) en Objeto. (D:\ruta\node_modules\expect\build\toThrowMatchers.js:83:11) en Object.throwingMatcher [como toThrow] (D:\ruta\node_modules\expect\build\index.js:342:21) en Object .toThrow (D:\path\apis\lambdas\utils\utils.test.js:71:80) en Promise.then.completed (D:\path\node_modules\jest-circus\build\utils.js:323: 28) en new Promise () en callAsyncCircusFn (D:\path\node_modules\jest-circus\build\utils.js:249:10) en _callCircusTest (D:\path\node_modules\jest-circus\build\run.js :276:40) en _runTest (D:\ruta\node_modules\jest-circus\build\run.js:208:3)
... y por lo tanto el corredor de prueba se bloquea.
¿Cómo puedo hacer que se ejecute esta prueba?
Notaré que tengo otras pruebas 'toThrow' que parecen funcionar perfectamente bien y que siguen el mismo camino aquí.
EDITAR: de nota, también probé un ajuste de función con nombre, con los mismos resultados del bloqueo del corredor de prueba:
const wrappedFunction = () => utils.saveImageToS3(undefined, date) test('throws error when missing required parameters', () => { expect(wrappedFunction).toThrow(`Missing required parameter for saveImageToS3:`)La función probada es una función asíncrona.
El código de prueba no está esperando la función, por lo que efectivamente, el error se genera después de que Jest intenta atraparlo. Agregue una espera a la llamada de función.
También debe agregar 'rechazos' porque está viendo una promesa fallida. Como esto:
test('throws error when missing required parameters', async () => { await expect(async () => await utils.saveImageToS3(undefined, date)).rejects.toThrow(`Missing required parameter for saveImageToS3:`) })