【问题标题】:How do I mock AWS S3 GetObjectCommand with jest using the v3 sdk?如何使用 v3 sdk 开玩笑地模拟 AWS S3 GetObjectCommand?
【发布时间】:2021-10-02 04:45:20
【问题描述】:

测试 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()
  }
}

进程进入 parse 方法并抛出错误“您尝试访问的存储桶必须使用特定端点寻址”

【问题讨论】:

标签: typescript amazon-web-services amazon-s3 ts-jest aws-sdk-js


【解决方案1】:

应用示例有效https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javascriptv3/example_code/s3/tests/s3_putbucketpolicy.test.js

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

【讨论】:

    猜你喜欢
    • 2022-09-26
    • 2020-11-18
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 2020-08-20
    • 2021-05-27
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多