首页 > 解决方案 > 您如何指定模拟 AWS Lambda 背后的代码

问题描述

我目前正处于对我的 lambda 进行单元测试的阶段,这是我第一次这样做,所以请多多包涵。

我已经对此进行了研究,并且我想我设法确定了我应该使用哪个包以及哪种方法。

据我所知,aws-sdk-mock是要走的路。它似乎完整且有据可查,因此在这个方向上没有问题。我唯一遇到的问题是缺少 AWS Lambda Invoke 模拟的文档。

我遇到的主要问题是模拟一个特定函数,其代码与测试存储在同一个项目中。

即:我有一个lambda.ts

export const handler: APIGatewayProxyHandlerV2 = async (event: any) => {
    const body = event.body;
    //do things with body
    return {
      statusCode:200,
      body: "OK"
    }
}

我如何正确地模拟这个?我开始了一个lambda.test.ts看起来像这样的:

import AWSMock from "aws-sdk-mock"
import AWS from "aws-sdk"

beforeAll(async (done) => {
  //get requires env vars
  done()
})

describe("Calling lambda", () => {
  it("should reject API call because of missing arguments", async () => {
    AWSMock.setSDKInstance(AWS)
    AWSMock.mock("Lambda", "invoke", async (params, callback) => {
        const lambda = new AWS.Lambda()
        await lambda.invoke({
            FunctionName: 'lambda',
            ...?
        }).promise()
    })
  })
})

我不知道如何表明这个模拟 lambda 背后的代码在某处可用。

在此先感谢您的帮助!

标签: node.jsamazon-web-servicesunit-testingaws-lambdaaws-sdk-mock

解决方案


推荐阅读