Почему переменные в файле конфигурации не загружаются в моих тестах jest?

#javascript #express #jestjs #environment-variables

Вопрос:

Итак, мой конфигурационный файл выглядит так:

 require('dotenv').config();


const PORT = process.env.REACT_APP_PORT

const MONGODB_URI = process.env.NODE_ENV === 'test'
? process.env.REACT_APP_TEST_MONGODB_URI
: process.env.REACT_APP_MONGODB_URI

const SECRET = process.env.REACT_APP_SECRET

const NODE_ENV = process.env.NODE_ENV;

module.exports = {
  MONGODB_URI,
  PORT,
  SECRET,
  NODE_ENV
} 

И переменные .env (доступ к которым осуществляется с помощью переменной config.) загружаются без проблем во всей программе.
Но когда я запускаю jest из папки, в которой находится тест, они не загружаются и остаются неопределенными.

Но когда я запускаю jest из корневой папки (где находится package.json), они загружаются.

Кто-нибудь может объяснить, почему, пожалуйста?

И следующая странная часть:

Если я изменю свою конфигурацию вот так:

 const path = require('path')
require('dotenv').config({ path: path.resolve(__dirname, "../.env") });

//the rest is the same as before 

Это внезапно сработает, даже если я запущу jest из папки, в которой находятся тесты.

Может кто-нибудь, пожалуйста, объяснить мне это странное взаимодействие?

Моя файловая структура выглядит так, кстати

структура папок/файлов

Комментарии:

1. Ваш .env файл находится в корневом каталоге, не так ли? Я предполагаю, что зависимость загружает конфигурацию из корня, если вы не находитесь в корне, вам нужно указать путь.

2. @carlosnufe да, мой .env находится в корне. Но все переменные среды уже загружены в config.js, и экспортируется оттуда. Так что шутка не имеет никакого отношения к фактическому файлу .env.