【问题标题】:How to mock an Amazon DynamoDB v3 in Nodejs using Jest?如何使用 Jest 在 Nodejs 中模拟 Amazon DynamoDB v3?
【发布时间】:2022-04-07 09:09:02
【问题描述】:

我正在使用来自 aws-sdk v3 的用于 javascript 的 Amazon DynamoDB 包。
这是我遵循的文档:https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/dynamodb-examples.html
我已经安装了“@aws-sdk/client-dynamodb”包来从代码中执行 CRUD 操作。
我以这种方式从包中导入命令:

import { DynamoDBClient, PutItemCommand, DeleteItemCommand, UpdateItemCommand, GetItemCommand } from "@aws-sdk/client-dynamodb";
const dynamodbClient = new DynamoDBClient({ region: process.env.DYNAMODB_REGION, endpoint: process.env.DYNAMODB_ENDPOINT });
const result = await dynamodbClient.send(new PutItemCommand(params));

我曾尝试按照 Jest 文档模拟 Amazon DynamoDB,但它在本地调用真正的 Amazon DynamoDB。

如何在 Nodejs 中模拟这些“@aws-sdk/client-dynamodb”包?
请提供Nodejs中的示例!

【问题讨论】:

  • 如果您想为此编写单元测试用例,您需要在 dynamoDb 上构建一个包装器并模拟该包装器层。实现该包装层的一种方法是构建存储库模式。模拟 Dynamodb 并非不可能,但模拟您自己的包装层会容易得多。

标签: node.js amazon-web-services amazon-dynamodb aws-sdk


【解决方案1】:

这个答案可能来晚了:) 目前有两个非常有用的包来处理 aws dynamodb 模拟

我的情况是,我最终使用了第二个选项,jest-dynalite,因为它不需要 java 并且很容易配置:)

【讨论】:

    【解决方案2】:

    您可以将AWSMock 与 sinon 一起使用,并根据需要模拟方法和响应。它非常适合 jest,而且它不会调用真正的数据库。

    【讨论】:

      【解决方案3】:

      您应该安装 aws dynamodb jar 并将端点与您的 dynamodb 客户端一起使用。

      您可以设置一个 docker 容器来运行 dynamodb:

      $ docker run -d -p 8000:8000 instructure/dynamo-local-admin:latest
      

      当您为测试设置 dynamodb 客户端时,请继续使用端点:

      import { DynamoDBClient, PutItemCommand, DeleteItemCommand, UpdateItemCommand, GetItemCommand } from "@aws-sdk/client-dynamodb";
      const dynamodbClient = new DynamoDBClient({ region: process.env.DYNAMODB_REGION, endpoint: process.env.DYNAMODB_ENDPOINT });
      const result = await dynamodbClient.send(new PutItemCommand(params));
      

      运行测试后,您可以在 localhost:8000 提供的管理 UI 上查看结果。

      【讨论】:

        猜你喜欢
        • 2019-06-19
        • 2021-11-04
        • 2019-09-18
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        相关资源
        最近更新 更多