无服务器AWS Lambda Express应用程序中的摩卡testing

我有一个nodejs应用程序基于expressjs ,我正在testing使用gruntjs作为任务运行者和mochajs作为testing框架。 因此,我编写了组件testing,集成testing和unit testing,这些testing是通过grunt test执行的,或者是在开发过程中直接通过mocha test/component/v1/apiX本地执行的,而在部署过程中作为CIstream程的一部分在testingVM上执行。

现在,当考虑将此应用程序迁移到AWS Lambda(也称为无服务器)时 ,会想到以下有关我的testing和CI过程的问题(请注意,我将使用aws-serverless-express ,因此不必明确写入lambda函数) :

1)如何实现通过HTTP API请求完成的组件/ e2etesting?

2)如何实现只加载和testing应用程序的一部分的集成和unit testing?

3)如果任何一个testing失败,如何整合一个拒绝部署的新的CIstream程?

我认为问题1)大部分已经解决了:从外部testingAWS Lambda的方法有很多。 您可以执行lambda-to-lambdatesting,从testinglambda直接调用您的lambda-to-test,也可以使用来自test-lambda的HTTP通过AWS API Gateway调用lambda-to-test,如此处所述。 你也可以使用serverless-mocha-plugin进行本地lambdatesting(如果使用无服务器的话 )。

这是2)它变得有趣:一旦你的lambda部署它是一个黑匣子。 你不能执行任何没有被明确声明为lambda接口的东西。 我如何保存或重新实施现有的摩卡咖啡单元和集成testing?

3)相同:你如何让你的CI运行所有的部署testing,如果失败,拒绝部署?

这里是我自己的方法:只有在testing环境中,我才能使我的节点应用程序无服务器。 简单地让它作为经典的节点HTTP服务,通过使所有无服务器的变化有条件的取决于环境。 由于几乎没有变化,这应该是可能的和可维护的。 现在我可以像往常一样在本地运行testing,并使用grunt和mocha进行部署。 然后,如果我想确认无服务器版本也可以,我仍然可以进行最后的lambda-to-lambdatesting。

你的方法听起来不错。 至于3你可以让你的CI运行本地testing,部署到“开发”或“testing”的环境,并运行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请求失败或返回意外的值时处理失败抛出错误。