【发布时间】: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