gpt4 book ai didi

javascript - 如何用 Jest 模拟 S3?

转载 作者:行者123 更新时间:2023-12-03 07:04:13 24 4
gpt4 key购买 nike

我正在尝试编写上传测试代码。
但我并没有低估如何正确使用jest.mock('aws-sdk')

export class S3Service {
private readonly s3: S3;
private readonly bucket: string;
constructor(private readonly configService: ConfigService) {
this.s3 = new S3({
accessKeyId: this.configService.get(''),
secretAccessKey: this.configService.get(''),
region: this.configService.get(''),
});
this.bucket = this.configService.get('');
}
async upload(name: string, contentType: string, buffer: Buffer): Promise<string> {
const upload = await this.s3.upload({params...}).promise();
return upload;
}
}

最佳答案

这是单元测试解决方案:
s3Service.ts :

import { S3 } from 'aws-sdk';

export class S3Service {
private readonly s3: S3;
private readonly bucket: string;
constructor(private readonly configService) {
this.s3 = new S3({
accessKeyId: this.configService.get(''),
secretAccessKey: this.configService.get(''),
region: this.configService.get(''),
});
this.bucket = this.configService.get('');
}
public async upload(name: string, contentType: string, buffer: Buffer): Promise<any> {
const bucket = this.bucket;
const params = { Bucket: bucket, Key: 'key', Body: buffer };
const upload = await this.s3.upload(params).promise();
return upload;
}
}
s3Service.test.ts :

import { S3Service } from './s3Service';

const mS3Instance = {
upload: jest.fn().mockReturnThis(),
promise: jest.fn(),
};

jest.mock('aws-sdk', () => {
return { S3: jest.fn(() => mS3Instance) };
});

describe('61830632', () => {
it('should upload correctly', async () => {
const configService = {
get: jest
.fn()
.mockReturnValueOnce('accessKeyId')
.mockReturnValueOnce('secretAccessKey')
.mockReturnValueOnce('us-east')
.mockReturnValueOnce('bucket-dev'),
};
mS3Instance.promise.mockResolvedValueOnce('fake response');
const s3Service = new S3Service(configService);
const actual = await s3Service.upload('name', 'contentType', Buffer.from('ok'));
expect(actual).toEqual('fake response');
expect(mS3Instance.upload).toBeCalledWith({ Bucket: 'bucket-dev', Key: 'key', Body: Buffer.from('ok') });
});
});

覆盖率 100% 的单元测试结果:

 PASS  stackoverflow/61830632/s3Service.test.ts (11.362s)
61830632
✓ should upload correctly (6ms)

--------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
--------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
s3Service.ts | 100 | 100 | 100 | 100 |
--------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 12.738s

关于javascript - 如何用 Jest 模拟 S3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61830632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com