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

325
Vistas
Cómo simular NODE_ENV en prueba unitaria usando Jest

Quiero configurar NODE_ENV en una de las pruebas unitarias, pero siempre está configurado para probar, por lo que mis pruebas fallan.

loggingService.ts

 ... const getTransport = () => { if (process.env.NODE_ENV !== "production") { let console = new transports.Console({ format: format.combine(format.timestamp(), format.simple()), }); return console; } const file = new transports.File({ filename: "logFile.log", format: format.combine(format.timestamp(), format.json()), }); return file; }; logger.add(getTransport()); const log = (level: string, message: string) => { logger.log(level, message); }; export default log;

loggingService.spec.ts

 ... describe("production", () => { beforeEach(() => { process.env = { ...originalEnv, NODE_ENV: "production", }; console.log("test", process.env.NODE_ENV); log(loglevel.INFO, "This is a test"); }); afterEach(() => { process.env = originalEnv; }); it("should call log method", () => { expect(winston.createLogger().log).toHaveBeenCalled(); }); it("should not log to the console in production", () => { expect(winston.transports.Console).not.toBeCalled(); }); it("should add file transport in production", () => { expect(winston.transports.File).toBeCalledTimes(1); }); }); ...

¿Cómo puedo establecer process.env.NODE_ENV en producción en mis pruebas, preferiblemente en beforeEach, de modo que el bloque if en mi servicio sea falso y se devuelva el transporte de archivos? He omitido parte del código en aras de la brevedad.

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

0

El problema central al que se enfrenta se debe al hecho de que una vez que intenta importar el archivo que está tratando de probar en su conjunto de pruebas, el código que contiene se evaluará de inmediato y se ejecutarán las funciones implícitamente invocadas, lo que significa que el logger.add(getTransport()); se llamará antes de que cualquiera de las funciones como beforeEach tenga la oportunidad de establecer las variables de entorno.

La única forma de evitar esto es utilizar el siguiente enfoque:

Primero deberá asignar la variable de entorno process.env.NODE_ENV a una variable const dentro de otro archivo. Llamémoslo environmentVariables.ts , y su contenido será el siguiente:

 export const ENVIRONMENT = process.env.NODE_ENV;

Entonces tendremos que refactorizar getTransport para usar esta variable de la siguiente manera:

 const getTransport = () => { if (ENVIRONMENT !== "production") {

En su conjunto de pruebas, tendrá que simular el archivo const que le permitirá cambiar la configuración de la variable ENVIRONMENT . Nota ../src/environmentVariables es un directorio de ejemplo y tendrá que definir realmente cuál es el directorio relevante de este archivo. Además, asegúrese de que esto esté fuera de la cláusula de describe , preferiblemente arriba para facilitar la lectura:

 jest.mock('../src/environmentVariables', () => ({ ENVIRONMENT: 'production', }));

Sus pruebas unitarias se ejecutarán con el ENVIRONMENT siendo production .

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