AWS SAM CLI单元测试Lambda函数NodeJS

问题描述

我正在使用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 中。只要里面没有秘密就可以安全。