Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

618
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda