我正在使用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
。有关更多信息,请参阅本文档。
希望能有所帮助。