Можно ли загрузить переменные среды из файла env для целей модульного тестирования в Jest? Я хочу запустить серию тестов на нем, например, так:
// unit tests for env file
describe('env', () => {
it('should have a client id', () => {
expect(process.env.CLIENT_ID).toBeDefined();
});
it('should have a client secret', () => {
expect(process.env.CLIENT_SECRET).toBeDefined();
});
it('should have a host', () => {
expect(process.env.HOST).toBeDefined();
});
it('should have a scope', () => {
expect(process.env.SCOPE).toBeDefined();
});
it('should have a response type', () => {
expect(process.env.RESPONSE_TYPE).toBeDefined();
});
it('should have a redirect uri', () => {
expect(process.env.REDIRECT_URI).toBeDefined();
});
});
В настоящее время все вышеперечисленные тесты не пройдут, заявив, что переменные не определены. Первоначально я использовал настройку mocha/chai, которая позволяла мне загружать все переменные env с помощью dotenv. Это включало запуск всех модульных тестов через веб-пакет и работало нормально.
Однако, читая документацию, Jest не запускает тесты через веб-пакет; вместо этого модули извлекаются через moduleNameMapper. Это отлично работает для всего остального, но я не могу получить переменные файла env для загрузки. До сих пор я пытался использовать опцию setupFiles для js файла, который вызывает dotenv.config с указанным ему путем к файлу env:
// setup file for jest
const dotenv = require('dotenv');
dotenv.config({ path: './env' });
Это не сработало, поэтому я теперь прибегаю к использованию только файла .env.js для модульных тестов и передаю этот файл в опцию setupFiles. Тем не менее, для удобства обслуживания и для того, чтобы он работал с веб-пакетом для производства, я бы хотел сохранить все это в одном файле. Вот выдержка из того, как файл .env.js выглядит для справки.
// .env.js extract example
process.env.PORT = 3000;
process.env.HOST = 'localhost';
process.env.CLIENT_ID = 'your client id';
process.env.REDIRECT_URI = 'your callback endpoint';