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

216
Visualizações
Cambie el simulacro de broma en la clase para una sola prueba

Tengo un problema en el que quiero cambiar lo que devuelve un método de clase para una sola prueba mientras pruebo un módulo diferente. tengo lo siguiente:

testingModule.prueba.js

 const { testingModuleMethod } = require('../testingModule') jest.mock('../helperClass', () => jest.fn().mockImplementation(() => ({ helperClassMethod: jest.fn() })) ); describe('testingModule.js', () => { describe('testingModuleMethod', () => { describe('when errors', () => { const consoleSpy = jest.spyOn(console, 'error'); // SOMETHING NEEDS TO GO HERE TO CHANGE THE jest.mock ON LINE 3 await expect(testingModuleMethod(data)).rejects.toThrow('Error'); expect(consoleSpy).toHaveBeenCalled(); consoleSpy.mockRestore(); }); }); });

testingModule.js

 const HelperClass = require('./helperClass'); const testingModuleMethod = async (data, callback) => { try { const objectToEvaluate = data.object; const helperClassInstance = new HelperClass(); await helperClassInstance.helperClassMethod(objectToEvaluate); log('info', "Success!"); callback(null, {}); } catch(error) { log('error', 'Something went wrong') } };

No importa lo que ponga allí, recibo un error con el código (indefinido) o simplemente lo ignora y se resuelve debido a la simulación al principio. Intenté agregar un espía, importar la clase y usar la anulación del prototipo.

Estoy usando nodo y "jest": "^27.0.6"

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

He logrado responder a esto haciendo lo siguiente:

En primer lugar, descubrí que para simular una clase como esa, tengo que agregar una función de broma en el simulacro de esta manera:

 describe('testingModuleMethod', () => { describe('when errors', () => { const consoleSpy = jest.spyOn(console, 'error'); HelperClass.mockImplementation(() => ({ helperClassMethod: jest.fn(() => { throw new Error('Error') }) })); await expect(testingModuleMethod(data)).rejects.toThrow('Error'); expect(consoleSpy).toHaveBeenCalled(); consoleSpy.mockRestore(); }); });

Sin embargo, esto también tuvo un efecto secundario en el resto de las pruebas, así que agregué un beforeEach al comienzo que se ve así:

 HelperClass.mockImplementation( jest.fn().mockImplementation(() => ({ helperClassMethod: jest.fn() })) );

Finalmente necesitaba requerir la clase. La prueba general se ve así ahora y funciona:

 const { testingModuleMethod } = require('../testingModule'); const HelperClass = require('./helperClass'); jest.mock('../helperClass', () => jest.fn().mockImplementation(() => ({ helperClassMethod: jest.fn() })) ); describe('testingModule.js', () => { beforeEach(() => { HelperClass.mockImplementation( jest.fn().mockImplementation(() => ({ helperClassMethod: jest.fn() })) ); }); describe('testingModuleMethod', () => { describe('when errors', () => { const consoleSpy = jest.spyOn(console, 'error'); HelperClass.mockImplementation(() => ({ helperClassMethod: jest.fn(() => { throw new Error('Error') }) })); await expect(testingModuleMethod(data)).rejects.toThrow('Error'); expect(consoleSpy).toHaveBeenCalled(); consoleSpy.mockRestore(); }); }); });
over 4 years ago · Santiago Trujillo 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