【问题标题】:How to mock AWS S3.getobject() using mocha?如何使用 mocha 模拟 AWS S3.getobject()?
【发布时间】:2017-01-11 08:03:59
【问题描述】:

在使用 mocha 进行测试期间,我遇到了 S3.getObject() 的调用问题。

我在 Lambda 中的代码是这样的:

index.js:(AWS Lambda 函数内部)

S3.getObject(s3FileParams, function(err, data) {
    if (err) {
        var message = "Error while trying to get file object " + fullFileName + " from bucket " + bucketName + ". Make sure they exist and your bucket is in the same region as this function. Error: " + err;
        console.error(message);
    }
    else {
        userMetaDataJson = data.Metadata;
    }
    resolve();
})

在测试文件中 index.test.js(使用 mocha)

AWSMock.mock('S3', 'getObject', function (params, callback){
    var metaDataParams = {
        "Metadata": {
            "startDate": "2016-11-11 12:34:56:000",
            "endDate":   "2016-11-11 12:34:56:000",
            "userName":  "userName",
            "originalFileName": "originalFileName"
        }
    };
    callback(false, metaDataParams);
});

使用 mocha 运行此测试时,没有调用模拟的 getObject() 而是调用原始的,有什么我可以做的吗?

我还有其他方法可以使用吗?

【问题讨论】:

    标签: amazon-web-services testing amazon-s3 mocha.js aws-lambda


    【解决方案1】:

    解决方案是在我的 AWS Lambda 中创建 S3 实例,而不是作为全局变量

    【讨论】:

    • 这可能会解决模拟问题,但不鼓励性能,因为 S3 将在每次调用函数时实例化,而不是在创建容器时实例化。
    【解决方案2】:

    一个提示:除了模拟单个 S3 响应,您还可以利用一些非常复杂的现有模拟框架。例如,moto 提供的功能与实际的 S3 API 非常相似。

    您还可以查看LocalStack,这是一个结合现有工具并提供可用于集成测试的功能齐全的本地云环境(包括 S3)的框架。

    虽然其中一些工具是用其他语言 (Python) 编写的,但在您的 node.js 测试的外部进程中启动测试环境应该很容易。

    【讨论】:

      猜你喜欢
      • 2019-03-24
      • 2019-01-28
      • 1970-01-01
      • 2018-07-03
      • 2021-06-08
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多