如何使用 v3 sdk 开玩笑地模拟 AWS S3 GetObjectCommand?
How do I mock AWS S3 GetObjectCommand with jest using the v3 sdk?
测试 s3 上传?测试方法是
export class ProcessData {
constructor() {}
async process(): Promise<void> {
const data = await s3Client.send(new GetObjectCommand(bucket));
await parseCsvData(data.Body)
}
这是我对测试用例的尝试。
import {S3Client} from '@aws-sdk/client-s3';
jest.mock("aws-sdk/clients/s3", () => {
return {
S3Client: jest.fn(() => {
send: jest.fn().mockImplementation(() => {
data: Buffer.from(require("fs").readFileSync(path.resolve(__dirname, "test.csv")));
})
})
}
});
describe("@aws-sdk/client-s3 mock", () => {
test('CSV Happy path', async () => {
const processData = new ProcessData()
await processData.process()
}
}
进程进入解析方法并抛出错误“您尝试访问的存储桶必须使用特定端点寻址”
import {s3Client} from '../clients/s3Client';
jest.mock("../clients/s3Client.ts");
describe("@aws-sdk/client-s3 mock", () => {
test('CSV Happy path', async () => {
// @ts-ignore
s3Client.send.mockResolvedValue({
Body: Buffer.from(require("fs").readFileSync(path.resolve(__dirname, "nrl-small2.csv")))
})
})
对于任何想直接模拟客户端的人,您可以使用 AWS SDK 团队推荐的库 aws-sdk-client-mock。
一些介绍tutorial
初始步骤:
import fs from 'fs';
import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';
import { mockClient } from 'aws-sdk-client-mock';
const mockS3Client = mockClient(S3Client);
然后你可以这样模拟它
mockS3Client.on(GetObjectCommand).resolves({
Body: fs.createReadStream('path/to/some/file.csv'),
});
你也可以监视客户端
const s3GetObjectStub = mockS3Client.commandcalls(GetObjectCommand)
// s3GetObjectStub[0] here refers to the first call of GetObjectCommand
expect(s3GetObjectStub[0].args[0].input).toEqual({
Bucket: 'foo',
Key: 'path/to/file.csv'
});
测试 s3 上传?测试方法是
export class ProcessData {
constructor() {}
async process(): Promise<void> {
const data = await s3Client.send(new GetObjectCommand(bucket));
await parseCsvData(data.Body)
}
这是我对测试用例的尝试。
import {S3Client} from '@aws-sdk/client-s3';
jest.mock("aws-sdk/clients/s3", () => {
return {
S3Client: jest.fn(() => {
send: jest.fn().mockImplementation(() => {
data: Buffer.from(require("fs").readFileSync(path.resolve(__dirname, "test.csv")));
})
})
}
});
describe("@aws-sdk/client-s3 mock", () => {
test('CSV Happy path', async () => {
const processData = new ProcessData()
await processData.process()
}
}
进程进入解析方法并抛出错误“您尝试访问的存储桶必须使用特定端点寻址”
import {s3Client} from '../clients/s3Client';
jest.mock("../clients/s3Client.ts");
describe("@aws-sdk/client-s3 mock", () => {
test('CSV Happy path', async () => {
// @ts-ignore
s3Client.send.mockResolvedValue({
Body: Buffer.from(require("fs").readFileSync(path.resolve(__dirname, "nrl-small2.csv")))
})
})
对于任何想直接模拟客户端的人,您可以使用 AWS SDK 团队推荐的库 aws-sdk-client-mock。
一些介绍tutorial
初始步骤:
import fs from 'fs';
import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';
import { mockClient } from 'aws-sdk-client-mock';
const mockS3Client = mockClient(S3Client);
然后你可以这样模拟它
mockS3Client.on(GetObjectCommand).resolves({
Body: fs.createReadStream('path/to/some/file.csv'),
});
你也可以监视客户端
const s3GetObjectStub = mockS3Client.commandcalls(GetObjectCommand)
// s3GetObjectStub[0] here refers to the first call of GetObjectCommand
expect(s3GetObjectStub[0].args[0].input).toEqual({
Bucket: 'foo',
Key: 'path/to/file.csv'
});