Aws 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;

背景

我参加这个项目是为了缓解一些压力。问题是没有其他人做过这件事,所以我正在开创这项事业

我所知道的

我可以通过以下方式在本地获得lambda函数输出:

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中设置断点)?到目前为止,我还没有找到解决的办法,在我看来,这将是最后一个难题。