node.js - Mocha 在无服务器 AWS Lambda Express 应用程序中进行测试

标签 node.js amazon-web-services mocha.js aws-lambda serverless-framework

我有一个nodejs应用程序基于expressjs我正在使用 gruntjs 进行测试作为任务运行程序和 mochajs作为测试框架。因此,我编写了组件、集成和单元测试,当我在测试虚拟机上进行开发时,这些测试可以通过 grunt test 或直接通过本地 mocha test/component/v1/apiX 执行作为 CI 流程一部分的部署期间。

现在,当考虑将此应用程序移动到 AWS Lambda 又名 going serverless 时关于我的测试和 CI 流程,我想到了以下问题(请注意,我将使用 aws-serverless-express,因此不必显式编写 lambda 函数):

1) 如何实现通过 HTTP api 请求完成的组件/e2e 测试?

2)如何实现仅加载和测试应用程序的一部分的集成和单元测试?

3) 如何将两者与新的 CI 流程集成,如果任何测试失败,该流程将拒绝部署?

我认为问题 1) 已基本解决:有很多方法可以从外部测试 AWS Lambda。您可以直接从 test-lambda 调用 lambda-to-test 来执行 lba-to-lambda 测试,也可以使用来自 test-lambda 的 HTTP 通过 AWS API Gateway 调用 lambda-to-test,如 here 中所述。 。您还可以使用serverless-mocha-plugin用于本地 lambda 测试(如果使用 serverless )。

这是 2) 有趣的地方:一旦部署了 lambda,它就是一个黑匣子。您无法执行任何未显式声明为 lambda 接口(interface)的内容。如何保存或重新实现现有的 Mocha 单元和集成测试?

与 3) 相同:如何让 CI 运行所有部署测试并在失败时拒绝部署?

这是我自己的方法:只有在测试环境中,我才会使我的 Node 应用程序无服务器。只需根据环境使所有无服务器更改成为有条件的,就可以让它作为经典 Node HTTP 服务工作。由于几乎不需要进行任何更改,因此这应该是可能且可维护的。现在我可以像往常一样在本地运行测试,并使用 grunt 和 mocha 进行部署。然后,如果我想确保无服务器版本也能正常工作,我仍然可以进行最终的 lambda 到 lambda 测试。

最佳答案

你的方法听起来不错。至于 3,您可以让 CI 运行本地测试,部署到“开发”或“测试”环境并运行 lambdaTests

grunt # run grunt commands including local mocha tests
serverless deploy --stage test # deploy to test environment (serverless#1.0 syntax)
grunt lambdaTest

您需要确保 lambdaTest 命令能够处理 lambda 请求失败或返回意外值时引发的错误。

关于node.js - Mocha 在无服务器 AWS Lambda Express 应用程序中进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39937095/

相关文章:

node.js - 为某个测试指定 Node 版本

node.js - 使用 ExclusiveStartKey 选项的 AWS Dynamodb 扫描

sockets - nodejs中的套接字

amazon-web-services - 如何仅使用 aws codebuild 服务将 github 代码复制到 s3 存储桶?

amazon-web-services - 如何将输入传递给多个 ARN(aws step 函数)?

javascript - 如何使用 jasmine 或 mocha 对接受参数的 javascript 函数进行单元测试

node.js - 在角度 5 中创建构建时出错

javascript - Node 在继续之前等待异步功能

amazon-web-services - AppSync 和 GraphQL 枚举突变

node.js - Mocha 重试不起作用