【发布时间】:2018-10-11 20:39:17
【问题描述】:
背景
我参与这个项目是为了帮助减轻一些压力。麻烦的是也没有其他人做过这件事,所以我正在开创这一事业。
我所知道的
我可以通过以下方式在本地获取 lambda 函数输出:
serverless invoke local -f getArticlesById -p localfile.json -s dev
它会按预期返回一篇 JSON 文章。
问题
我正在使用 Jasmine 来测试我的 javascript lambda 函数。如何在本地对这些无服务器环境功能进行单元测试?
当前尝试
我的 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 函数。当我注释掉该行时,我没有收到错误消息。我猜是因为这不是 serverless 调用,所以 Elasticsearch 对我的环境一无所知。
test/article.js
console.log("testing articles")
const LambdaTester = require("lambda-tester");
const articleHandler = require("../articles/articleHandler.js");
describe("articles getID()", function() {
it("test success", function() {
return LambdaTester(articleHandler.getID)
.event({pathParameters:{id:5633415102001}})
.expectResult(result => {
expect(result.body.data.id).to.be(5633415102001)
});
});
})
describe("articles getList()", function() {
it("test success", function() {
return LambdaTester(articleHandler.getList)
.event()
.expectResult(reset => {
expect(result.body.data.length).to.be(10);
});
});
});
** 额外的 **
看起来lambda-tester 应该可以缓解我遇到的问题。今天会发现更多。
【问题讨论】:
标签: aws-lambda