Переменные Process.env недоступны вне функции во время тестирования шутки

#javascript #node.js #unit-testing #jestjs

#javascript #node.js #модульное тестирование #jestjs

Вопрос:

Я столкнулся с проблемой, когда мои импортированные env переменные недоступны за пределами области действия функции, и мне интересно, является ли это преднамеренным дизайном или я делаю что-то не так

Например, моя настройка выглядит так

/src/index.test.js

 //require config
const config = require('../config.json');
const myFunc = require('./index.js');

beforeEach(async () =>
{
   //set env vars
     process.env = Object.assign(process.env, config);
})

test('sample', async () =>
{
   //call function
   await myFunc();

  expect(somethingMeaninful).toBeCalledTimes(1);
})
 

И тогда мой фактический код выглядит так

src/index.js

 const myVar = process.env.myVar

console.log(process.env.myVar) //<= will be undefined

async function myFunc()
{
   console.log(process.env.myVar) //<= will show my value from config.json file

    return somethingMeaninful();
}

exports.myFunc = myFunc();
 

Таким образом, поскольку myVar объявлено вне функции, оно не определено.
Я попытался выполнить console.log() для process.env в целом внутри и за пределами моей функции, и снаружи у него были бы все значения по умолчанию, но внутри него также были бы значения по умолчанию мои значения конфигурации. Действительно смущен тем, как и почему это происходит. Эти переменные не являются неопределенными при обычном запуске моего кода, но не определены во время тестирования…

Эта ссылка упоминает эту проблему здесь, а также проблему тестирования github vue

Ответ №1:

Думаю, я понял это. По-видимому, мой jest.config.js файл никогда не считывался. И из-за этого ни один из setupFiles or setupFilesAfterEnv не был запущен.

Это было потому, что у меня был мой jest.config.js in <rootDir>/jest , потому что я во вложенной папке вызвал jest его, и он никогда не запускался. Перемещение его оттуда в root устранило мои проблемы. И все мои файлы выполняются по мере необходимости