RDSDataClient cannot be mocked
sthuber90 opened this issue · 2 comments
sthuber90 commented
RDSDataClient
is not part of the the mock library but should be.
Lambda function example code:
import { injectLambdaContext, Logger } from '@aws-lambda-powertools/logger'
import { captureLambdaHandler, Tracer } from '@aws-lambda-powertools/tracer'
import { ExecuteStatementCommand, RDSDataClient } from '@aws-sdk/client-rds-data'
import middy from '@middy/core'
import { APIGatewayProxyResult } from 'aws-lambda'
const logger = new Logger()
const tracer = new Tracer()
const database_name = process.env.dbName
const db_cluster_arn = process.env.dbClusterArn
const db_credentials_secrets_store_arn = process.env.dbSecretArn
const client = tracer.captureAWSv3Client(
new RDSDataClient({
region: process.env.AWS_REGION,
maxAttempts: 10,
}),
)
const lambdaHandler = async (): Promise<APIGatewayProxyResult> => {
const sql = `SELECT * FROM my_table`
const command = new ExecuteStatementCommand({
secretArn: db_credentials_secrets_store_arn,
resourceArn: db_cluster_arn,
database: database_name,
sql,
formatRecordsAs: 'JSON',
})
const result = await client.send(command)
return {
statusCode: 200,
body: JSON.stringify({
names: result.formattedRecords ? JSON.parse(result.formattedRecords) : [],
}),
}
}
export const handler = middy(lambdaHandler)
.use(injectLambdaContext(logger, { logEvent: true }))
.use(captureLambdaHandler(tracer))
Test:
import AWSMock from "aws-sdk-mock"
import AWS from "aws-sdk"
import { ExecuteStatementCommand } from "@aws-sdk/client-rds-data"
import { handler } from '../src'
// context redacted
describe("test lambda function handler", () => {
beforeEach(() => {
AWSMock.setSDKInstance(AWS)
})
afterEach(() => {
AWSMock.restore()
})
it("should run", async () => {
AWSMock.setSDKInstance(AWS)
// error in following line that RDSDataClient is not known
AWSMock.mock("RDSDataClient", "send", (params: ExecuteStatementCommand, callback: Function) => { // <========================
console.log("DynamoDB", "getItem", "mock called")
callback(null, { formattedRecords: JSON.stringify([]) })
})
const res = await handler(/*...*/)
// make asserts
})
})
nelsonic commented
@sthuber90 thank you for your feedback.
Could you please give a bit more detail as to your use case and what you have already tried to do?
Thanks.