开玩笑嘲笑属性“listObjectsV2”时它不存在?

问题描述 投票:0回答:1

我正在构建一个笑话单元测试。 我想使用下面的代码使用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
运行时错误。 有谁知道为什么吗?

amazon-web-services amazon-s3 jestjs mocking
1个回答
0
投票

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 },
    ],
});
© www.soinside.com 2019 - 2024. All rights reserved.