node.js - 如何模拟适用于 Node.js 的 AWS SDK v3?
问题描述
我使用 Node.js 开发了一些 AWS Lambda,它通过 AWS SDK v3 使用 DynamoDB。
我不知道如何DynamoDBClient
在单元测试中正确地使用 jest 来模拟。
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)
解决方案
如果您想测试 dynamoDB,这个库 ( https://www.npmjs.com/package/dynamodb-local ) 对我来说非常适合。它的作用是在执行诉讼时在本地部署 dynamoDB。我用于 dynamoDB v2 和 v3。
**唯一的要求是在我们的机器(JRE)中安装 java,因为使用JAR 文件在本地部署 dynamo 而不是 docker image **。
希望有所帮助!
推荐阅读
- r - 由于尾随制表符导致的 readr::read_tsv() 解析失败
- google-chrome-devtools - Chrome 开发者工具 - 性能分析
- spring - jpa 共享密钥的两个表,该密钥是外部密钥和复合密钥的一部分
- python - Huey 不在 Django 中调用任务
- haskell - 从 Bool 到 String 的输入“->”模式匹配时 Haskell 解析错误
- azure-functions - Azure Functions,使 local.settings.json 值优先于系统环境变量
- heroku - Heroku ChatOps(Slack 集成)- 仅路由生产事件
- javascript - 为什么反应值有时不会在模板中更新?(Vue)
- linux - 递归删除所有文件和文件夹,但不包括一个文件夹
- xcode - How Can I Make a View, With a Tab View in It, Scrollable?