我使用 Node.js 开发一些 AWS Lambda,Node.js 通过 AWS SDK v3 使用 DynamoDB。
我不知道如何正确使用笑话来模拟
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)
这应该有帮助:https://aws.amazon.com/blogs/developer/mocking-modular-aws-sdk-for-javascript-v3-in-unit-tests/ 您需要使用
aws-sdk-client-mock
来模拟 Dynamo DB。
如果您想测试 dynamoDB,这个库(https://www.npmjs.com/package/dynamodb-local)非常适合我。它的作用是在执行案例期间在本地部署 dynamoDB。我用于 dynamoDB v2 和 v3。
**唯一的要求是在我们的机器上安装 java (JRE),因为使用 JAR 文件在本地部署 dynamo,而不是 docker 镜像 **.
希望有帮助!