Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

323
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda