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

612
Vistas
Jest/Typescript: dependencias de clases simuladas en Jest y Typescript

Tengo la clase B que depende de la clase A. Quiero probar un método de la clase B que llama internamente a un método de la clase A. Ahora, quiero probar unitariamente mi método de la clase B burlándome de la clase A.

Mi estructura de código:

 class A { getSomething() { return "Something"; } } class B { constructor(objectOfClassA: A) { this._objectOfClassA = objectOfClassA; } functionofClassBToTest() { const returnValueFromClassA = this._objectOfClassA.getSomething(); return returnValueFromClassA; } }

Lo que he probado hasta ahora:

 import .... import { mocked } from 'jest-mock'; jest.mock("./A", () => { return { A: jest.fn().mockImplementation(() => { return { getSomething: getSomethingMock } }) }; }); const getSomethingMock = jest.fn().mockImplementation(() => { return "Mock value"; }); const mockA = mocked(A, true); test("test functionofClassBToTest", () => { const classBToTest = new B(mockA); expect(classBToTest.functionofClassBToTest.toStrictEqual("Mock value"); });

Este es el error que me sale:

 TypeError: this._objectOfClassA.getSomething is not a function

Nota: no quiero inicializar un objeto de clase A dentro de mi función de prueba. Solo quiero burlarme de la clase.

También encontré algunas publicaciones anteriores en SO: Post1 y Post2 pero nada funcionó.

ACTUALIZACIÓN: este problema se resolvió gracias a la respuesta de James a continuación . Para burlarse de las clases con miembros privados, he hecho otra pregunta SO . Por favor, léalo.

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

0

Dado que Typescript tiene un tipo estructural , debería ser posible simplemente construir un objeto literalmente que coincida con la interfaz de la clase A y pasarlo a la clase B.

Por ejemplo:

 const mockA: jest.Mocked<A> = { getSomething: jest.fn() }; const b = new B(mockA); expect(mockA.getSomething) .toHaveBeenCalled();

Esto no debería generar errores de tipo dado que mockA coincide exactamente con la interfaz de la clase A.

Para simular el valor de retorno de los métodos de A, consulte la simulación de funciones individuales con Jest.

Esto demuestra ser más simple y sucinto que intentar burlarse de todo el módulo. Dado que ha utilizado IoC como patrón, no es necesario simular el módulo.

También tienes un error tipográfico. La clase B se asigna a una variable de instancia con solo un guión bajo, pero luego llama al método en una variable de instancia con dos guiones bajos.

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