Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

244
Vistas
¿Cómo espiar la misma función del módulo en broma?

Estoy escribiendo pruebas unitarias para una función que llama a otra función dentro del mismo módulo.

P.ej.

 export function add(a, b) { return a + b } export function showMessage(a, b) { let sum = add(a, b) return `The sum is ${sum}` }

Prueba:

 import * as Logics from './logics; describe('showMessage', () => { it('should return message with sum', () => { let addSpy = jest.spyOn(Logics, 'add') let showMessageResponse = Logics.showMessage(2, 2) expect(addSpy).toHaveBeenCalledTimes(1) }); });

Quiero probar si se llama a la función de agregar cuando se ejecuta showMessage. El anterior está dando el siguiente error:

Número esperado de llamadas: 1 Número de llamadas recibidas: 0

Encontré una solución, pero eso requiere cambios en la forma en que se exportan las funciones:

 function add(a, b) { return a + b } function showMessage(a, b) { const sum = Logics.add(a, b) return `The sum is ${sum}` } const Logics = { showMessage, add } export default Logics

No quiero cambiar la forma en que exporto las funciones.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

En resumen, realmente no puede lograrlo sin cambiar sus exportaciones en absoluto. Puede leer los motivos (y tal vez otras opciones en esta respuesta , así como en esta respuesta ).

En mi opinión, una mejor opción sería algo como (en su archivo logics.js):

 import * as Logics from './logics;

y en la función showMessage como lo hizo en su segundo ejemplo:

 const sum = Logics.add(a, b)

Básicamente, solo importa todo en su logics.js y usa ese valor para obtener la referencia a la misma función de add .

Explicación adicional: mientras se burla correctamente del add , pero esa no es la misma función que la llamada en showMessage y básicamente no puede burlarse de esa función (también puede verificar este código como prueba

 describe("showMessage", () => { it("should return the mocked sum (PASSES)", () => { jest.spyOn(Logics, "add").mockReturnValue(123); const showMessageResponse = Logics.add(2, 2); expect(showMessageResponse).toBe(123); }); it("should return message with sum (FAILS)", () => { let addSpy = jest.spyOn(Logics, "add").mockReturnValue(123); const showMessageResponse = Logics.showMessage(2, 2); expect(addSpy).toHaveBeenCalledTimes(0); expect(showMessageResponse).toBe(`The sum is 123`); }); });

) también publicado en este sandbox

about 4 years ago · Juan Pablo Isaza Denunciar

0

Idealmente, debe probar la función independiente. Una prueba no es responsable de la funcionalidad de prueba de otra función.

No es el mejor enfoque, pero podrías hacer algo como esto:

util.js

 export function add(a, b) { return a + b; } export function showMessage(a, b, addNew = add) { let sum = addNew(a, b); return `The sum is ${sum}`; }

Y en tu prueba podrías hacer esto: util.test.js

 import * as Logics from "./util"; describe("showMessage", () => { it("should return message with sum", () => { let addSpy = jest.spyOn(Logics, "add"); addSpy.mockReturnValue(123); let showMessageResponse = Logics.showMessage(2, 2, addSpy); expect(addSpy).toHaveBeenCalledTimes(1); expect(showMessageResponse).toBe(`The sum is 123`); }); });

Aquí está la caja de arena con la que puedes jugar: https://codesandbox.io/s/jest-test-forked-9zk1s4?file=/util.test.js:0-366

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda