【问题标题】:How to mock AWS SDK v3 for Node.js?如何模拟适用于 Node.js 的 AWS SDK v3?
【发布时间】:2022-03-04 03:39:36
【问题描述】:

我使用 Node.js 开发了一些 AWS Lambda,它通过 AWS SDK v3 使用 DynamoDB。

我不知道如何在单元测试中正确使用 jest 来模拟 DynamoDBClient

const LambdaTester = require('lambda-tester')

const {DynamoDBClient} = require("@aws-sdk/client-dynamodb")
const handler = require('./my-handler').handler

describe('handler', function () {
  it('Handler should work properly', async function () {
    const response = {
      Item: {
        a: {S: 'a'},
        b: {S: 'b'}
      }
    }

    DynamoDBClient.mockImplementation(() => {
      return {
        send: () => response
      }
    })

    await LambdaTester(handler)
      .event({
         // ...
      })
      .expectResult((res) => {
         // ...
      })
    })
})

当我运行测试时,似乎试图执行真正的代码并抛出异常。

ResourceNotFoundException: Requested resource not found
   at deserializeAws_json1_0GetItemCommandError (./node_modules/@aws-sdk/client-dynamodb/protocols/Aws_json1_0.ts:3128:39)

【问题讨论】:

  • 看起来上面的错误与给定的代码无关。无论如何,您可能必须在同一级别模拟 jest.mock("@aws-sdk/client-dynamodb")require 事物。如果它不起作用,您可以分享您的处理程序代码吗?

标签: node.js unit-testing jestjs aws-sdk-nodejs


【解决方案1】:

如果您想测试 dynamoDB,这个库 (https://www.npmjs.com/package/dynamodb-local) 非常适合我。它的作用是在执行诉讼时在本地部署 dynamoDB。我用于 dynamoDB v2 和 v3。

**唯一的要求是在我们的机器(JRE)中安装java,因为使用JAR file to deploy dynamo locally instead docker image **。

希望有所帮助!

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 2023-03-09
    • 2014-07-10
    • 2021-04-04
    • 2023-02-10
    • 1970-01-01
    • 2020-08-13
    • 2021-05-13
    • 1970-01-01
    相关资源
    最近更新 更多