我正在构建一个笑话单元测试。 我想使用下面的代码使用spyOn函数来模拟S3 listObjectsV2
import { S3 } from 'aws-sdk';
jest.spyOn<any, any>(S3.prototype, 'listObjectsV2').mockReturnValue({
promise: () =>
Promise.resolve({
$response: {
Contents: [
{ Key: 'assets/file1', Size: 5 },
{ Key: 'assets/file2', Size: 5 },
{ Key: 'assets/excluded-file2', Size: 5 },
],
},
}),
});
出于某种原因,我得到
Property 'listObjectsV2' does not exist in the provided object
运行时错误。
有谁知道为什么吗?
listObjectsV2
是在 AWS SDK 的更高版本(大约 v3)中引入的。
您的代码 (AWS-SDK version: 2.1601)
可能使用旧版本,其中 listObjectsV2
不存在。
建议的方法是将您的 AWS 开发工具包升级到支持 listObjectsV2 的版本。请参阅 AWS SDK for JavaScript 文档了解升级说明:https://aws.amazon.com/sdk-for-javascript/
用现有方法进行模拟:
这是一个使用潜在替代方法(listObjects)进行模拟的示例:
import { S3 } from 'aws-sdk';
jest.spyOn<any, any>(S3.prototype, 'listObjects').mockReturnValue({
Contents: [
{ Key: 'assets/file1', Size: 5 },
{ Key: 'assets/file2', Size: 5 },
{ Key: 'assets/excluded-file2', Size: 5 },
],
});