Я пишу модульный тест для службы, которая использует aws-sdk для вывода списка всех файлов из корзины s3.
Внутри функции я создаю экземпляр класса S3 и использую listObjectsV2, который извлекает файлы из корзины S3, в тесте я должен насмехаться над этой функцией, чтобы вернуть фиктивные данные.
Проблема в том, что я не могу найти способ смоделировать экземплярный класс для переопределения функции, я не хочу передавать объект S3 в параметре (внедрение зависимости)
aws.service:
listAllFiles = (bucket: string, documentsPath: string): Promise<ObjectList> => {
const params: S3.ListObjectsV2Request = {
Bucket: bucket,
EncodingType: 'url',
StartAfter: documentsPath
};
return this.listAllFilesCore(params);
}
private listAllFilesCore(params: S3.ListObjectsV2Request): Promise<ObjectList> {
return new Promise<ObjectList>((resolve, reject) => {
let result: ObjectList = []; const s3bucket = new S3(this.config);
s3bucket.listObjectsV2(params, (err, data) => {
if (err) {
logger.error(err.message);
logger.error(err.stack);
reject(err);
} else {
result = result.concat(data.Contents);
if (data.IsTruncated) {
logger.debug('get further list...');
this.listAllFilesCore(Object.assign(params, { ContinuationToken: data.NextContinuationToken }))
.then(r => {
result = result.concat(r);
resolve(result);
});
} else {
logger.debug(`get S3 Success from ${params.StartAfter}`);
resolve(result);
}
}
});
});
}
let awsService: any;
beforeAll(() => {
jest.mock('aws-sdk/clients/s3');
awsService = require('./aws.service').awsService;
});
it('listAllFiles from S3', () => {
const S3 = require('aws-sdk/clients/s3');
S3.listObjectsV2 = jest.fn((param: any,
callback?: (err: any, data: any) => void) => {
callback(undefined, data2);
});
Я получаю сообщение об ошибке: s3bucket.listObjectsV2 не является функцией