Probar proceso.env con Jest
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 con
process.env.APP_PORT
¿Cómo puedo lograr esto con Jest? ¿ Puedo configurar estas process.env
variables antes de cada prueba o tal vez debería burlarme de ellas de alguna manera?
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.
Jest setupFiles
es la forma correcta de manejar esto, y no necesita instalar dotenv
ni usar ningún .env
archivo 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.
Otra opción es agregarlo al jest.config.js
archivo después de la module.exports
definició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 .spec
archivo y se pueden ajustar globalmente.