我正在使用mocha和chai编写lambda函数(exports.handler)的单元测试。我正在编写单元测试的那个内部还有另一个lambda函数调用。
我不想调用对第二个lambda函数的实际调用。有什么方法可以模拟对此lambda函数的调用?
exports.handler = (event, context, callback) => {
try {
var lambda = new AWS.Lambda();
/*need to mock this lambda call*/
lambda.invoke({
FunctionName: myFunction,
Payload: payload}, function(error, data) {});
}
catch(e){
}
真的很感谢任何帮助。
答案 0 :(得分:2)
我同意@AironBrynchke使用一致的方法。由于您已经使用async/await
,因此避免使用回调。
这就是我进行测试的方法。
const AWS = require('aws-sdk');
exports.handler = async (event) =>
{
try
{
const lambda = new AWS.Lambda();
await lambda.invoke(
{
FunctionName: 'whatever', // I changed it for test sample
Payload: 'payload'
}).promise();
}
catch (ex)
{
console.error(ex);
}
};
并进行测试
const chai = require('chai');
const sinon = require('sinon');
const assert = chai.assert;
const proxyrequire = require('proxyquire');
const invokeStub = sinon.stub().returns({
promise: sinon.stub().resolves()
});
// here we want to mock `Lambda`
const src = proxyrequire('path-to-your-source-file', {
'aws-sdk': {
Lambda: sinon.stub().returns({
invoke: invokeStub
})
}
});
describe('lambda test', function() {
it('runs test', async function() {
await src.handler({});
assert(invokeStub.calledWith({ FunctionName: 'whatever', Payload: 'payload' }));
})
});
答案 1 :(得分:1)
首先,您要混合两种样式。如果您使用的是 try 和& catch 阻止,则:
exports.handler = async (event) =>
{
try
{
const lambda = new AWS.Lambda();
await lambda.invoke(
{
FunctionName: myFunction,
Payload: payload
}).promise();
}
catch (ex)
{
console.error(ex);
}
};
如何使用mochaJs测试lambda函数: 我可以提供一些参考,您可以自己找出适合您的情况。