我试图在我的 Jest 中模拟一个 Lambda.invoke() 调用。但是,模拟调用不起作用,而是执行了真正的 invoke() 方法,该方法导致not authorized to perform: lambda:InvokeFunction
. 我无法找出问题所在,因为我在模拟 DynamoDB.DocumentClient 时也做了同样的事情,而且它没有任何问题。
笑话文件:
describe('Mock Lambda', () => {
beforeAll(async () => {
AWSMock.mock('Lambda', 'invoke', (params, callback) => {
if (params.FunctionName === 'MyLambaInvocation') {
callback(null, { status: 200, data: { code: '0', message: 'Successful' }
}
});
const result = await (myTest.handler(event, context(), null) as Promise<APIGatewayProxyResult>);
});
打字稿文件:
import { Lambda } from 'aws-sdk';
export function invokeLambda(eventObject) {
return new Promise<any>((resolve, reject) => {
const lambdaConfig = {
region: 'ap-southeast-1',
endpoint: process.env.IS_OFFLINE ? 'http://localhost:8080' : undefined
};
const lambda = new Lambda(lambdaConfig);
const params = {
FunctionName: 'MyLambaInvocation',
Payload: JSON.stringify(eventObject)
};
lambda.invoke(params, (error, result) => {
if (error) {
reject(error);
} else {
resolve(result);
}
});
});
}