Mocha在无服务器的AWS Lambda Express App中进行测试

时间:2016-10-08 20:33:27

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

我有一个基于nodejsexpressjs应用,我正在使用gruntjs作为任务运行器和mochajs作为测试框架进行测试。因此,我编写了组件,集成和单元测试,这些测试通过grunt test执行,或者在我开发时直接通过mocha test/component/v1/apiX执行,并在部署期间作为CI过程的一部分在测试VM上执行。

现在考虑将此应用程序移动到AWS Lambda又名going serverless时,我会想到有关我的测试和CI过程的以下问题(请注意,我将使用aws-serverless-express,因此不会明确地写lambda函数):

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

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

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

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

它是2)它变得有趣:一旦你的lambda被部署,它就是一个黑盒子。您不能执行任何未明确声明为lambda接口的内容。如何保存或重新实现我现有的摩卡单元&集成测试?

相同的3):如何使CI运行所有部署测试,如果失败则拒绝部署?

这是我自己的方法:只有在TEST环境中才会使我的节点app无服务器。简单地让它作为经典节点HTTP服务工作,使所有无服务器更改都取决于环境。由于几乎不需要进行任何更改,因此这应该是可行且可维护现在,我可以像往常一样在本地运行测试,也可以使用grunt和mocha进行部署。如果我想确保无服务器版本也能正常工作,那么我仍然可以进行最终的lambda-to-lambda测试。

1 个答案:

答案 0 :(得分:1)

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

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

当lambda请求失败或返回意外值时,您需要确保lambdaTest命令处理抛出错误的失败。