Skip to content

RDSDataClient cannot be mocked #283

Description

@sthuber90

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
  })
})

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions