如何在jest测试中为无服务器框架设置环境变量



我正在使用Jest为我的无服务器框架服务进行集成测试。目前,我有.env文件指定环境变量,这就是我的问题所在。

在我的包.json中,我有:

...
"scripts": {
...
"start": "npx sls offline start --env local --httpPort xxxx --port xxxx --lambdaPort xxxx"
}
...

当我调用yarn start时,服务开始正确读取.env.local文件。但是,当我在beforeAll函数中调用exec('yarn start')时(因为我需要运行服务来测试端点(,服务从.env文件而不是.env.local.中的配置开始

我已经没有办法设置正确的变量了,我使用了jest setupFiles,并尝试像process.env.ENV1='XX'一样手动设置变量,但没有成功。到目前为止,唯一成功的就是将我的测试脚本从jest更改为ENV1=X ENV2=Y ENV3=Z jest,但感觉不对。

有一个很好的无服务器插件,叫做"无服务器导出env";,它导出您在serverless.yml中设置的所有环境变量,这样您就可以开玩笑地使用它们,或者在本地调用它们。

安装插件后,您需要将其放在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

此外,您可以通过将此命令添加到package.json中的script来自动执行此过程,以便在运行npm test时,它也会为您运行serverless export-env。有关更多信息,请参阅本文档。

希望能有所帮助。

最新更新