Tengo una biblioteca que me está dando algunos problemas en mis pruebas de broma.
Esta biblioteca está incluida en todo mi proyecto y tiene una función annoyingFunction que contiene un error de console.error . Entonces, cada vez que ejecuto una prueba, naturalmente recibo mensajes de error de console.error no deseados por todas partes.
No quiero burlarme de toda la biblioteca, solo la annoyingFunction , así que puse esto en mi archivo de configuración:
jest.mock('myLibrary', () => ({ ...jest.requireActual('myLibrary'), annoyingFunction: jest.fn(), })); Esto se está ejecutando, sin embargo, todavía se está llamando a la función annoyingFunction original, contaminando mis pruebas con llamadas de console.error .
Si registro mi simulacro en la consola, veo claramente annoyingFunction: [Function: mockConstructor] , por lo que el simulacro funciona, pero por alguna razón, la función original de la biblioteca aún se está llamando.
¿Que me estoy perdiendo aqui? ¿Hay algún problema con mi configuración inicial del simulacro?
Podría haber un par de cosas mal, pero supongo que la annoyingFunction se llama internamente dentro de la biblioteca. Considere el siguiente ejemplo, que no hace lo que podría esperar:
foo.js
function add(a, b) { return a + b; } function subtract(a, b) { return a - b; } function multiply(a, b) { let total = 0; for (let i = 0; i < b; i++) { total = add(total, a); } return total; } export { add, subtract, multiply };foo_test.js
import * as Operations from "./foo.js"; jest.mock("./foo.js", () => ({ ...jest.requireActual("./foo.js"), add: () => -999, })); describe("all the things", () => { // Here, the mock does what you would expect, because you're calling the // exported function "add." it("can add", () => { expect(Operations.add(1, 2)).toEqual(-999); }); it("can subtract", () => { expect(Operations.subtract(1, 2)).toEqual(-1); }); // Here, the mock doesn't do what you would expect. because unbeknownst to // you, `multiply` calls `add` _within_ the module code. The mock has no // effect in this case. it("can multiply", () => { expect(Operations.multiply(1, 2)).toEqual(2); }); });No estoy muy seguro de lo que puede hacer al respecto, excepto simular los métodos exportados de la biblioteca hasta que pueda controlar el resultado.
O... puede jest.spyOn console.error cualquier prueba que le esté dando problemas y luego restablecer el espía .
const consoleErrorSpy = jest.spyOn(console, "error"); //...do your test... consoleErrorSpy.mockRestore();¡Espero que ayude!