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

217
Vistas
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 Respuestas
Responde la pregunta

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