问题描述
我正在使用SAM CLI测试和部署AWS Lambda函数。我正在尝试在NodeJS中使用Mocha和Chai运行单元测试。测试位于test
目录中,我可以使用命令mocha --recursive
运行测试。
问题是我在测试中使用环境变量。我的环境变量在SAM CLI的template.yaml
文件中定义。看起来像这样:
RefreshFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/handlers/index.handler
Runtime: nodejs12.x
MemorySize: 128
Timeout: 100
Environment:
Variables:
APP_ID: A
CLIENT_ID: B
CLIENT_SECRET: C
AWS_REGION_DB: D
此处将它们定义为,当我部署功能时,它们也自动随其一起移到AWS上。它还允许我使用sam local invoke
命令,该命令可通过Docker在本地运行我的lambda函数。
总有没有人知道sam local invoke
命令可用于在本地运行lambda函数来运行测试用例?或者如何使用Mocha和Chai在测试案例中访问template.yaml
文件中的环境变量?
解决方法
我已经通过创建测试使用的.env
文件临时解决了该问题,只是没有在我的部署中包括该文件。尽管还是很受欢迎的答案,因为我不确定它是否可以解决更多的问题。
我发现了另一种方法。您可以在自己的本地机器上设置环境变量:
MacOS:
export APP_ID=A
视窗:
SET APP_ID=A
然后像往常一样使用 mocha 运行您的测试。
,环境变量旨在在您的环境中定义。如果您想在本地运行但更改部分/所有环境变量,则可以使用其他工具,例如 dotenv
。您还可以使用 package.json
将这些放在 scripts
部分的 FOO=BAR
中。只要里面没有秘密就可以安全。