node.js - Node Jest S3 上传模拟
问题描述
我正在尝试在单元测试用例中模拟 S3 上传功能。我正在使用 jest 和 AWS-SDK-MOCK。
以下是我尝试过的代码:
#functionality to mock
const bucketUpload = async (
bucketName: string,
key: string,
body: any
) => {
const s3 = new S3();
const params: S3.PutObjectRequest = {
Body: body,
Bucket: bucketName,
Key: key
};
return await s3
.upload(params)
.promise()
.then(result => result)
.catch(err => err);
};
#Code used to mock it
import * as AWS from "aws-sdk";
import * as AWSMock from "aws-sdk-mock";
jest.mock("aws-sdk");
describe("when using the create function", () => {
const mockResponse = jest.fn((params: AWS.S3.PutObjectRequest, callback:any) =>
callback(null, {Location:"PublicLink"})
);
it("calls the put function", async () => {
AWSMock.setSDKInstance(AWS);
AWSMock.mock('S3', 'upload', mockResponse);
---- further test case ----
expect(Mock).toHaveBeenCalledTimes(1);
});
});
Error: Cannot read property 'upload' of undefined
这是我在工作时面临的错误。当我尝试调试问题时,我发现每次它都会模拟将数据上传到存储桶中的函数
解决方案
推荐阅读
- python - Seaborn barplot 在闪避参数下表现异常
- c++ - 如何在 C++ 中使用 getline()
- echarts4r - 用 echarts4R 为最右边的栏涂上不同的颜色
- java - 使用 AttributeConverter 的 Spring Boot 测试不适用于 Maven 测试
- callback - 如何在带有回调的流中更改 pyaudio 的音量
- python - Python 3: Iterator that is NOT a generator?
- django - Django不增加数量
- python - 用于 Internet Explorer 的 driver.find_element_by_name() 的 Selenium
- r - 我可以在 R 中改变(划分)具有不同长度的列吗?
- python - 如何在 C++ 中使用命名参数