Я использую Ручные издевательства. У меня есть мой класс как
import { S3 } from 'aws-sdk';
export interface S3Client {
getFile(bucketName: string, fileName: string): Promise<any>;
}
export class S3ClientImpl implements S3Client {
private s3Client: AWS.S3;
constructor() {
this.s3Client = new S3();
}
public async getFile(bucketName: string, fileName: string): Promise<any> {
const params = {
Bucket: bucketName,
Key: fileName,
};
const s3Response = await this.s3Client.getObject(params).promise();
if (s3Response && s3Response.Body) {
console.log(`Could Not Load File : s3://${bucketName}/${fileName}`);
}
return s3Response.Body.toString();
}
}
Я создал mocks и создал класс S3Client.ts как
import {S3} из 'aws -sdk' ;
export interface S3Client {
getFile(bucketName: string, fileName: string): Promise<any>;
}
export class S3ClientImpl implements S3Client {
public async getFile(bucketName: string, fileName: string): Promise<any> {
return JSON.stringify({
a: 'b',
});
}
}
Теперь в моей основной функции index.ts file
export async function start(event: any) {
// Make S3 calls to fetch URL and identifier
const x: string = JSON.parse(await s3.getFile('a', 'b'));
const y: string = JSON.parse(await s3.getFile('a', 'c'));
}
}
В моем модульном тесте я написал что-то вроде этого.
jest.mock('../src/client/S3Client');
и запустил запуск функции. Тест работает, печатает все. Я хочу проверить, был ли мой s3Client вызываться 2 раза. Как я могу это сделать ?