#jestjs #environment-variables #serverless-framework #serverless
#jestjs #переменные среды #бессерверная среда #бессерверный
Вопрос:
Я использую Jest для создания интеграционных тестов для моей службы бессерверной среды. В настоящее время у меня есть файлы .env, в которых указаны переменные среды, и вот где у меня проблема.
В моем package.json у меня есть :
...
"scripts": {
...
"start": "npx sls offline start --env local --httpPort xxxx --port xxxx --lambdaPort xxxx"
}
...
Когда я вызываю yarn start
службу, она начинает корректно считывать данные из файла .env.local. Но когда я вызываю exec('yarn start')
внутри функции beforeAll (потому что мне нужно запустить службу для тестирования конечных точек), служба запускается с конфигурацией из файла .env, а не .env.local.
У меня закончились идеи о том, как установить правильные переменные, я использовал jest setupFiles и попытался установить переменную вручную, process.env.ENV1='XX'
но это не сработало. До сих пор единственное, что получалось, это изменить мой тестовый скрипт с jest
на ENV1=X ENV2=Y ENV3=Z jest
на, но это кажется неправильным.
Ответ №1:
Существует хороший бессерверный плагин под названием «serverless-export-env», он экспортирует все переменные среды, которые вы задаете в serverless.yml, чтобы вы могли использовать их в jest или вызывать их локально.
После установки плагина вам нужно поместить его в первый элемент plugins
ключа, например:
plugins:
- serverless-export-env
- serverless-plugin-log-retention
- serverless-offline
также укажите параметры экспорта в custom
custom:
export-env:
filename: .env
overwrite: false
enableOffline: true
в этом примере переменные среды экспортируются в .env
файл в корне вашего проекта.
Затем вы можете выполнить serverless export-env
экспорт переменной среды в .env
.
Кроме того, вы можете автоматизировать этот процесс, добавив эту команду в свой script
in package.json
, чтобы при запуске npm test
она также выполнялась serverless export-env
для вас, подробнее см. Этот документ .
Надеюсь, это поможет.