Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.2K
Views
¿Cuál es la diferencia entre los métodos jest.fn() y jest.spyOn() en jest?

Estoy escribiendo los casos de prueba unitarios para mi proyecto de reacción y estoy usando bromas y enzimas para escribir casos de prueba. He leído la documentación de broma.

https://jestjs.io/docs/en/jest-object.html#jestspyonobject-methodname

que explica sobre el método jest.spyOn() pero no entendí completamente.

Así que quiero saber más detalles sobre los lugares específicos donde debemos usar jest.fn() y Dónde debemos/debemos usar jest.spyOn() . Sería de gran ayuda si se puede explicar con un ejemplo para ambos métodos.

Gracias

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Mi comprensión simple de estas dos funciones en proyectos de reacción/frontend es la siguiente:

jest.fn()

  • Quiere simular una función y realmente no le importa la implementación original de esa función (será anulada por jest.fn() )
  • A menudo te burlas del valor de retorno
  • Esto es muy útil si desea eliminar las dependencias del backend (por ejemplo, al llamar a la API del backend) o bibliotecas de terceros en sus pruebas.
  • También es extremadamente útil si desea realizar pruebas unitarias reales . No le importa si cierta función que llama la unidad que prueba funciona correctamente, porque eso no es parte de su responsabilidad.

jest.spyOn()

  • La implementación original de la función es relevante para su prueba, pero:
    • Desea agregar su propia implementación solo para un escenario específico y luego restablecerla nuevamente a través mockRestore() (si solo usa un jest.spyOn() sin burlarse más, seguirá llamando a la función original de manera predeterminada)
    • Solo quieres ver si se llamó a la función.
    • ...
  • Creo que esto es especialmente útil para las pruebas de integración, ¡pero no solo para ellas!

(Buena publicación de blog: https://medium.com/@rickhanlonii/understanding-jest-mocks-f0046c68e53c )

over 4 years ago · Santiago Trujillo Report

0

Según tengo entendido, la única diferencia es que USTED PUEDE RESTAURAR LA FUNCIÓN ORIGINAL con jest.spyOn y no puede con jest.fn

Imagine que tenemos un gancho que llama a una función cuando se procesa el componente, aquí podemos verificar que se llamó a la función, no probamos esa función.

Otro caso si queremos función original para probar cómo funciona. Y necesitamos ambos en un archivo de prueba.

verdadero método:

 myMethod() { return 33; }

Con jest.fn()

 const myMethod = jest.fn().mockImplementation(() => 25); const result = myMethod(); expect(result).toBe(25);

En caso de que queramos probar myMethod real ahora, no podemos restaurarlo a la normalidad con jest.fn().

Otra cosa con los espías:

 const spy_myMethod = jest.spyOn(component, "myMethod").mockImplementation(() => 25); const result = myMethod(); expect(result).toBe(25);

Y ahora si queremos el myMethod original

 spy_myMethod.mockRestore(); const result = myMethod(); expect(result).toBe(33);
over 4 years ago · Santiago Trujillo Report

0

jest.fn() es un método para crear un stub, que le permite rastrear llamadas, definir valores de retorno, etc.

jest.spyOn() vino de jasmine, le permite convertir un método existente en un objeto en un espía, que también le permite rastrear llamadas y redefinir la implementación del método original.

Mi regla general sobre esto es: si desea convertir una implementación existente en un espía, use spyOn si está creando un simulacro, use fn() .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!