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

165
Vistas
¿Cómo simular una dependencia encapsulada con Jest?

Estoy tratando de simular el valor de retorno de un método de una clase que se instancia dentro de la clase que estoy probando, sin que el valor simulado persista en el resto de las pruebas.

Aquí hay una demostración muy básica que he reunido:

Misterio.ts

 export class Mystery { private max = 10; public getNumber(): number { return Math.random() * this.max; } }

TestedClass.ts

 import { Mystery } from './Mystery'; export class TestedClass { public someMethod() { const numberGenerator = new Mystery(); return numberGenerator.getNumber(); } }

TestedClass.test.ts

 import { Mystery } from './Mystery'; import { TestedClass } from './TestedClass'; jest.mock('./Mystery'); describe('TestedClass', () => { beforeEach(jest.clearAllMocks); it('should return the number 1000', () => { // I want to have Mystery.getNumber() return 1000 for this test only. Mystery.prototype.getNumber = jest.fn().mockReturnValue(1000); // jest.spyOn(Mystery.prototype, 'getNumber').mockReturnValue(1000); // Mystery.prototype.getNumber = jest.fn().mockReturnValueOnce(1000); const provider = new TestedClass(); const result = provider.someMethod(); expect(result).toEqual(1000); }); it('should return undefined', () => { const provider = new TestedClass(); const result = provider.someMethod(); // Expects: undefined, Received: 1000 expect(result).toEqual(undefined); }); });

Como puede ver en la prueba, veo que aparecen 1000 en la segunda prueba que me gustaría evitar. En el escenario real, es probable que todas las pruebas necesiten simular el valor de retorno de Mystery.getNumber() (de diferentes maneras), pero quiero asegurarme de que una prueba no afecte a otra prueba como podría ser ahora.

Este comportamiento actual tiene sentido ya que estoy cambiando Mystery.prototype , pero no estoy seguro de cómo simular el valor de la prueba individual de otra manera. También soy consciente del uso de la composición, lo que sería de gran ayuda aquí, pero me gustaría evitar esto por el bien de esta pregunta.

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

0

Si intenta simular el método getNumber solo para un único caso de prueba y no para todos los casos de prueba, el jest.fn().mockReturnValueOnce debería funcionar.

Entonces, en lugar de

 Mystery.prototype.getNumber = jest.fn().mockReturnValue(1000);

usar

 Mystery.prototype.getNumber = jest.fn().mockReturnValueOnce(1000);
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