Aws lambda 如何在本地测试无服务器lambda函数?
背景 我参加这个项目是为了缓解一些压力。问题是没有其他人做过这件事,所以我正在开创这项事业 我所知道的 我可以通过以下方式在本地获得lambda函数输出:Aws lambda 如何在本地测试无服务器lambda函数?,aws-lambda,Aws Lambda,背景 我参加这个项目是为了缓解一些压力。问题是没有其他人做过这件事,所以我正在开创这项事业 我所知道的 我可以通过以下方式在本地获得lambda函数输出: serverless invoke local -f getArticlesById -p localfile.json -s dev 它将按预期返回一篇JSON文章 问题 module.exports.getValueOfA = (event, context, callback) => { let a = 2;
serverless invoke local -f getArticlesById -p localfile.json -s dev
它将按预期返回一篇JSON文章
问题
module.exports.getValueOfA = (event, context, callback) => {
let a = 2;
if(event
&& event.pathParameters
&& !isNaN(event.pathParameters.a)
) a = event.pathParameters.a;
a = a+a;
let ret = "the value of a is " + a;
callback(null, ret);
}
我正在使用Jasmine测试我的javascript lambda函数。如何在本地对这些无服务器环境功能进行单元测试
当前尝试
const LambdaTester = require("lambda-tester");
const TestLambda = require("./testLambda.js");
describe("testLambda()", function() {
it("test success", function() {
let ret;
LambdaTester(TestLambda.getValueOfA)
.event()
.expectResult(result => {
console.log(result);
expect(result).toEqual("the value of a is 4");
});
});
});
我的lambda函数位于articles/articleHandler.js
中。我有一个test/articles.js
运行jasmine
测试,利用lambda tester
函数。每当我运行其中一个测试时,我都会得到错误
TypeError: Invalid hosts config. Expected a URL, an array of urls, a host config object, or an array of host config objects.
at new Transport (/Users/Jackson/Sites/serverless-content/node_modules/elasticsearch/src/lib/transport.js:59:13)
at new EsApiClient (/Users/Jackson/Sites/serverless-content/node_modules/elasticsearch/src/lib/client.js:57:22)
at Function.Client (/Users/Jackson/Sites/serverless-content/node_modules/elasticsearch/src/lib/client.js:101:10)
at Object.<anonymous> (/Users/Jackson/Sites/serverless-content-distribution-api-v2/elasticSearch.js:6:42)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Module.require (module.js:579:17)
**附加的**
看起来lambda tester
应该可以缓解我遇到的问题。今天将了解更多信息。使用,github页面上有一些示例
我编写了一个简单的lambda测试函数,然后用jasmine
+lambda tester
至于我的代码,我需要重构别人编写的处理程序,然后它才能工作。我的简单测试如下所示:
无服务器yml
testLambda:
handler: test/testLambda.getValueOfA
role: arn:aws:iam::367839381035:role/CodeStarWorker-fx-srch-api-v1-Lambda
events:
- http:
path: test/testLambda/{a}
method: get
Lambda函数
module.exports.getValueOfA = (event, context, callback) => {
let a = 2;
if(event
&& event.pathParameters
&& !isNaN(event.pathParameters.a)
) a = event.pathParameters.a;
a = a+a;
let ret = "the value of a is " + a;
callback(null, ret);
}
测试
const LambdaTester = require("lambda-tester");
const TestLambda = require("./testLambda.js");
describe("testLambda()", function() {
it("test success", function() {
let ret;
LambdaTester(TestLambda.getValueOfA)
.event()
.expectResult(result => {
console.log(result);
expect(result).toEqual("the value of a is 4");
});
});
});
我本来打算为参数设置这个,但没有实现。当然,这足以让任何人向前迈进。另一个选项是直接从测试中调用函数。最后,它只不过是一个函数,因此您可以导入模块并调用它,传递正确的参数。我尝试了
lambda tester
,看起来它确实做得很好。但是,当lambda tester
测试运行时,是否可以调试lambda函数(在VSCode中设置断点)?到目前为止,我还没有找到解决的办法,在我看来,这将是最后一个难题。