我正在尝试在本地测试我的lambda函数,使用mocha,chai和chai-as-promise,其中涉及async。我的lambda使用AWS context.succeed格式来返回结果,而不是回调,我需要保持这种方式。我在下面有一个测试,它返回200的状态代码,但是当我预计它是400时,它仍然通过测试(误报)。放置在自定义上下文中的任何日志都没有显示,表明它没有被击中,或者我对context.succeed如何工作的理解有点偏。任何指针都会非常感激。
注意 - lambda工作正常,测试就是我遇到的问题。
这是我到目前为止的简单代码。基本上,我调用我的lambda函数,按预期传递事件和上下文。当调用context.succeed时,它应该测试传递给上下文的结果。
'use strict';
const myHandler = require('../lambdaHandler');
const chai = require('chai');
const expect = chai.expect;
const chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
describe('myHandler.handler should return with expected statusCodes', () => {
it('should return a 200 statusCode', () => {
myHandler.handler(event, {
succeed : (data) => {
expect(data).to.eventually.have.property('statusCode');
expect(data.statusCode).to.eventually.equal(400);
},
fail : (data) => {
expect(data).to.have.property('statusCode');
},
});
});
});
答案 0 :(得分:1)
我建议你阅读这篇文章:
这解释了这些人是如何对他们的lambda进行单元测试的。
答案 1 :(得分:0)
以下是我要做的事情:
'use strict';
const myHandler = require('../lambdaHandler');
const chai = require('chai');
const expect = chai.expect;
const chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
describe('myHandler.handler should return with expected statusCodes', () => {
it('should return a 200 statusCode', (done) => {
try{
myHandler.handler(event, {
succeed : (data) => {
expect(data).to.eventually.have.property('statusCode');
expect(data.statusCode).to.eventually.equal(400);
done();
},
fail : (data) => {
expect(data).to.have.property('statusCode');
done();
},
});
} catch(err){
done(err.message);
}
});
});
答案 2 :(得分:0)
我最终选择了lambda-tester:https://github.com/vandium-io/lambda-tester。唯一的缺点是它不支持Node版本> 4.3.2
答案 3 :(得分:0)
以下是我使用lambda-local和jest测试从DynamoDB(local)获取数据的函数所做的示例:
{% set foo, bar = 'foo', 'bar' %}
{% set t1Tot,t2Tot,t3Tot = 0,0,0 /* ... */ %}