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

1.5K
Vistas
Cómo simular s3.upload() con Jest - node.js

Intento simular la función de carga de s3 con esta instrucción, pero cuando uso este patrón tengo un

TypeError: s3.upload no es una función

 // upload.test.js const AWS = require('aws-sdk'); jest.mock('aws-sdk', () => { const mS3 = { upload: jest.fn().mockReturnThis(), promise: jest.fn() }; return { S3: jest.fn(() => mS3) }; }); const s3 = new AWS.S3(); s3.upload({}).promise.mockResolvedValueOnce({ Bucket: 'XXX' });

Estoy usando también SQS y con este patrón tengo otro error:

AWS.SQS no es un constructor

¿Cómo puedo manejarlo?

 // upload.js const AWS = require('aws-sdk'); const s3 = new AWS.S3(); s3Params = { Bucket: S3_BUCKET, Key: `example.xml`, ACL: 'public-read', ContentType: 'application/json', Body: Buffer.from(file) } } await s3.upload(s3Params).promise();
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

En lugar de aws-sdk intente usar aws-sdk/clients/s3 .

over 4 years ago · Santiago Trujillo Denunciar

0

cuando usa Jest .mockReturnValueOnce , debe ejecutar el simulacro DESPUÉS de que se establezca ese valor para poder recibir el valor que definió en mockReturnValueOnce como respuesta,

por ejemplo, burlándose de S3:

 // s3-mock.test.js let AWS = require('aws-sdk'); jest.mock('aws-sdk', () => { let instance = { upload: jest.fn().mockReturnThis(), promise: jest.fn(), }; return { S3: jest.fn(() => instance) }; }); describe("setup for s3.upload testing", () => { let testS3; beforeEach(() => { testS3 = new AWS.S3(); testS3.promise.mockReturnValueOnce({ Bucket: 'TestBucketName' }); }) test('returns expected upload value', async () => { let params = {}; let result = await testS3.upload(params).promise(); expect(result).toEqual({ Bucket: 'TestBucketName' }); expect(result.Bucket).toBe("TestBucketName") }); });

y burlándose de SQS:

 // sqs-mock.test let AWS = require('aws-sdk'); jest.mock('aws-sdk', () => { let instance = { sendMessage: jest.fn().mockReturnThis(), promise: jest.fn(), }; return { SQS: jest.fn(() => instance) }; }); describe("setup for sqs.sendMessage testing", () => { let testSQS; beforeEach(() => { testSQS = new AWS.SQS(); testSQS.promise.mockReturnValueOnce({ MessageId: 'TestSQSId' }); }) test('returns expected message id', async () => { let params = {}; let result = await testSQS.sendMessage(params).promise(); expect(result).toEqual({ MessageId: 'TestSQSId' }); expect(result.MessageId).toBe("TestSQSId") }); });

ejemplo de trabajo en https://github.com/oieduardorabelo/jest-mock-aws-sdk

como puede ver, son idénticos, también puede usar simulacros manuales en Jest con una carpeta __mocks__ con todos los paquetes que usted y para simular en sus pruebas, eche un vistazo a los documentos en: https://jestjs.io/docs/ simulacros manuales

over 4 years ago · Santiago Trujillo 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