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

166
Views
¿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 answers
Answer question

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 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!