Как установить переменные среды для бессерверной среды в тестах jest

#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 для вас, подробнее см. Этот документ .

Надеюсь, это поможет.