Probar proceso.env con Jest

Resuelto Tomasz Mularczyk asked hace 6 años • 17 respuestas

Tengo una aplicación que depende de variables ambientales como:

const APP_PORT = process.env.APP_PORT || 8080;

Y me gustaría probar eso, por ejemplo:

  • APP_PORT se puede configurar mediante una variable de entorno de Node.js.
  • o que se está ejecutando una aplicación Express.js en el puerto configurado conprocess.env.APP_PORT

¿Cómo puedo lograr esto con Jest? ¿ Puedo configurar estas process.envvariables antes de cada prueba o tal vez debería burlarme de ellas de alguna manera?

Tomasz Mularczyk avatar Dec 30 '17 19:12 Tomasz Mularczyk
Aceptado

La forma en que lo hice se puede encontrar en esta pregunta de Stack Overflow .

Es importante usar resetModules antes de cada prueba y luego importar dinámicamente el módulo dentro de la prueba:

describe('environmental variables', () => {
  const OLD_ENV = process.env;

  beforeEach(() => {
    jest.resetModules() // Most important - it clears the cache
    process.env = { ...OLD_ENV }; // Make a copy
  });

  afterAll(() => {
    process.env = OLD_ENV; // Restore old environment
  });

  test('will receive process.env variables', () => {
    // Set the variables
    process.env.NODE_ENV = 'dev';
    process.env.PROXY_PREFIX = '/new-prefix/';
    process.env.API_URL = 'https://new-api.com/';
    process.env.APP_PORT = '7080';
    process.env.USE_PROXY = 'false';

    const testedModule = require('../../config/env').default

    // ... actual testing
  });
});

Si busca una manera de cargar valores ambientales antes de ejecutar Jest, busque la respuesta a continuación . Deberías usar setupFiles para eso.

Tomasz Mularczyk avatar Dec 31 '2017 13:12 Tomasz Mularczyk

Jest setupFileses la forma correcta de manejar esto, y no necesita instalar dotenvni usar ningún .envarchivo para que funcione.

jest.config.js:

module.exports = {
  setupFiles: ["<rootDir>/.jest/setEnvVars.js"]
};

.jest/setEnvVars.js:

process.env.MY_CUSTOM_TEST_ENV_VAR = 'foo'

Eso es todo.

zgreen avatar Nov 20 '2019 11:11 zgreen

Otra opción es agregarlo al jest.config.jsarchivo después de la module.exportsdefinición:

process.env = Object.assign(process.env, {
  VAR_NAME: 'varValue',
  VAR_NAME_2: 'varValue2'
});

De esta forma no es necesario definir las variables de entorno en cada .specarchivo y se pueden ajustar globalmente.

jahller avatar Oct 04 '2019 14:10 jahller