Tengo un módulo de clase que estoy tratando de probar unitariamente con Jest. Específicamente un método asíncrono. Quiero probar una rama en el método donde se arroja un error en un try , se detecta en la catch y luego se vuelve a generar desde la catch . Aquí hay un ejemplo reducido de la estructura.
miClase.js
const helper = require("helper"); module.exports = class myClass { constructor() { ... } async myMethod() { try { const response = await helper.getSomeObject(); if (response.someArray.length == 0) throw new Error("Whoops!"); return response; } catch (err) { ... throw err; } } }myClass.test.js (Intento #1)
const myClass = require("myClass"); const helper = require("helper"); describe("Testing myClass", () => { test("myMethod should throw error", async () => { helper.getSomeObject = jest.fn().mockResolvedValueOnce({someArray: []}); const mc = new myClass(); const response = await mc.myMethod(); expect(response).rejects.toEqual(Error("Whoops!")); }); });myClass.test.js (Intento #2)
const myClass = require("myClass"); const helper = require("helper"); describe("Testing myClass", () => { test("myMethod should throw error", async () => { helper.getSomeObject = jest.fn().mockResolvedValueOnce({someArray: []}); const mc = new myClass(); await mc.myMethod(); expect(async () => await mc.MyMethod()).toThrow("Whoops!"); }); }); Obviamente, no sé lo que estoy haciendo. En cualquiera de los dos intentos, la prueba unitaria falla, pero no parece fallar al verificar la declaración de expect . Parece que la declaración de expect ni siquiera se llama. Todo lo que veo en la salida es el mensaje de error "Whoops!" y eso es.
Agradecería mucho cualquier ayuda. ¡Gracias!
¡Lo averigué! Conseguí que funcionara con lo siguiente.
myClass.test.js (Intento #3)
const myClass = require("myClass"); const helper = require("helper"); describe("Testing myClass", () => { test("myMethod should throw error", async () => { helper.getSomeObject = jest.fn().mockResolvedValueOnce({someArray: []}); try { const mc = new myClass(); await mc.myMethod(); } catch (err) { expect(err).toEqual(Error("Whoops!")); } }); });