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