Como 'mockar' o retorno do S3.getObject na AWS SDK javascript V3
Não sei porquê mas na v3 da AWS SDK do serviço S3 quando você realiza um getObject você não consegue mais pegar o Body e transformar para string com o .toString()
.
Isso porque agora o retorno do objeto Body agora é um mix de Stream com Blob que implementa uma interface chamada SdkStreamMixin
export interface SdkStreamMixin {
transformToByteArray: () => Promise<Uint8Array>;
transformToString: (encoding?: string) => Promise<string>;
transformToWebStream: () => ReadableStream;
}
Agora você precisa fazer algo assim para pegar o valor de um objeto como String;
import { S3 } from '@aws-sdk/client-s3';
const s3 = new S3({});
const { Body } = await s3.getObject({ Bucket, Key });
const str = Body.transformToString('utf8');
Porém, se você está escrevendo testes unitários para algo como acima você agora também precisa fazer o getObject retornar esse novo objeto, e para isso você pode criar um SdkStreamMixin assim:
import { sdkStreamMixin } from '@aws-sdk/util-stream-node';
const Body = sdkStreamMixin(Readable.from(['conteúdo que desejar']));
jest.spyOn(s3, 'getObject').mockResolvedValueOnce({ Body });