Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

324
Views
How to mock DynamoDBDocumentClient constructor with Jest (AWS SDK V3)

I'm working with Jest to mock my AWS services, and more specifically DynamoDB and DynamoDBDocumentClient.

My code is currently similar to this :

import { DynamoDBClient } from "@aws-sdk/client-dynamodb"
import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb"
const ddbClient = new DynamoDBClient({})
const ddbDocumentClient = DynamoDBDocumentClient.from(ddbClient, config)

and the test spec looks like this:

jest.mock("@aws-sdk/client-dynamodb", () => ({
  DynamoDBClient: jest.fn(() => ({
    put: (params) => mockAwsResponse("DynamoDBClient", "GetCommand", params),
    put: (params) => mockAwsResponse("DynamoDBClient", "PutCommand", params),
  })),
}))

jest.mock("@aws-sdk/lib-dynamodb", () => ({
  DynamoDBDocumentClient: jest.fn(() => ({
    get: (params) => console.log("In DynamoDBClient get", params),
    put: (params) => mockAwsResponse("DynamoDBDocumentClient", "PutCommand", params),
    from: (params) => mockAwsResponse("DynamoDBDocumentClient", "from", params),
  })),
}))

Unfortunately Jest returns me this error : TypeError: lib_dynamodb_1.DynamoDBDocumentClient.from is not a function and I believe it's because I'm incorrectly mocking DynamoDBDocumentClient, as its constructor is a static method.

Thanks in advance for your help!

EDIT: Just noticed that it used the AWS SDK v3 for JavaScript, if that helps.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

In your example, you import your modules and run call your constructor right away (before entering any method in your script), this means that the object you are trying to mock needs to be available before entering any test methods. Try to place your mocks before (and outside of) your tests something like this:

import { DynamoDBClient } from "@aws-sdk/client-dynamodb"
import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb"

/* whatever constants you need for your mocks */

jest.mock('@aws-sdk/client-dynamodb', () => {
  return {
    DynamoDBClient: jest.fn().mockImplementation(() => {
      return {};
    }),
  };
});
jest.mock('@aws-sdk/lib-dynamodb', () => {
  return {
    DynamoDBDocumentClient: {
      from: jest.fn().mockImplementation(() => {
        return {
          send: jest.fn().mockImplementation((command) => {
            let res = 'something';
            if(command.name == 'GetCommand'){
               res = 'something else (a constant from earlier...)';
            }
            /* return whatever needs to be returned... */
            return Promise.resolve(res);
          }),
        };
      }),
    },
    /* Return your other docClient methods here too... */
    GetCommand: jest.fn().mockImplementation(() => {
      return { name: 'GetCommand' };
    }),
  };
});

// then you can implement your tests
describe('Endpoint something', () => {
  it('Should pass or something...', async () => {
    /* your test here... */
  });
});

Now your functions should be available when they are needed.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!