【发布时间】:2023-03-09 14:58:01
【问题描述】:
我正在使用 Jest 来模拟我的 AWS 服务,更具体地说是 DynamoDB 和 DynamoDBDocumentClient。
我的代码目前与此类似:
import { DynamoDBClient } from "@aws-sdk/client-dynamodb"
import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb"
const ddbClient = new DynamoDBClient({})
const ddbDocumentClient = DynamoDBDocumentClient.from(ddbClient, config)
测试规范如下所示:
jest.mock("@aws-sdk/client-dynamodb", () => ({
DynamoDBClient: jest.fn(() => ({
put: (params) => mockAwsResponse("DynamoDBClient", "GetCommand", params),
put: (params) => mockAwsResponse("DynamoDBClient", "PutCommand", params),
})),
}))
jest.mock("@aws-sdk/lib-dynamodb", () => ({
DynamoDBDocumentClient: jest.fn(() => ({
get: (params) => console.log("In DynamoDBClient get", params),
put: (params) => mockAwsResponse("DynamoDBDocumentClient", "PutCommand", params),
from: (params) => mockAwsResponse("DynamoDBDocumentClient", "from", params),
})),
}))
不幸的是,Jest 给我返回了这个错误:TypeError: lib_dynamodb_1.DynamoDBDocumentClient.from is not a function,我相信这是因为我错误地模拟了DynamoDBDocumentClient,因为它的构造函数是一个静态方法。
提前感谢您的帮助!
编辑:刚刚注意到它使用了适用于 JavaScript 的 AWS SDK v3,如果有帮助的话。
【问题讨论】:
-
您是否查看过有关模拟 DynamoDBDocumentClient 的其他问题?他们没有解决你的问题吗?
-
我有,他们没有回答我的问题。我见过的最接近的主题是this 一个,但它与我的情况并不完全匹配。
-
您需要使用
DynamoDBDocumentClient.from吗? -
这段代码不是我开发的,所以我可能错了。但据我了解,之前的开发人员想要创建一个具有特定配置的
DynamoDBDocumentClient,而这需要使用DynamoDBClient,因此他们创建了一个空的并在其中提供config。 -
我想知道完全相同的事情,有什么解决方案吗? @Fares
标签: javascript node.js unit-testing jestjs aws-sdk