#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 устранило мои проблемы. И все мои файлы выполняются по мере необходимости