【问题标题】:Stubbing AWS S3 object request存根 AWS S3 对象请求
【发布时间】:2018-07-26 04:15:42
【问题描述】:

我正在尝试排除获取 AWS 存储桶中对象的请求。我已经阅读了他们关于存根请求的文档,并且只能存根存储桶,而不是对象。以下是我尝试过的一些方法:

通过 AWS 配置存根:

Aws.config[:s3] = {
  stub_responses: {
    list_buckets: {
      buckets: [name: "my-bucket"],
      list_objects: [key: "file.pdf"]
    }
  }
}

虽然得到了桶,但它并没有给我对象。调用 s3.buckets 将列出存储桶,但 s3.objects 将是空的。

戳穿webmock gem:

tempfile = file_fixture('file.pdf').read
base_uri = Regexp.new "https://my-bucket.s3.us-west-1.amazonaws.
stub_request(:get, base_uri).to_return(status: 200, body: tempfile)

这似乎仍然不起作用。调用 bucket.objects 仍然返回一个空集合。

我要测试的控制器中的代码:

s3 = Aws::S3::Resource.new
bucket = s3.bucket("my-bucket")
@files = {}

bucket.objects.each do |item|
  @files[File.basename(item.key)] = item.presigned_url(:get)
end

我的目标是确保我的视图显示指向我的@file 变量中的对象的链接,并且我想测试该链接。任何帮助将不胜感激!我是使用 AWS S3 开发的新手,而 googlge 并没有太多帮助。我正在使用 aws-sdk-s3 gem 来使用 AWS S3。

【问题讨论】:

    标签: ruby-on-rails amazon-web-services testing amazon-s3 aws-sdk-ruby


    【解决方案1】:

    想通了。我还需要删除#list_objects 方法以获取对象。最终的存根看起来像这样:

    Aws.config[:s3] = {
      stub_responses: {
        list_buckets: {
          buckets: [name: "my-bucket"]
        },
        list_objects: {
          contents: [{key: "mykey"}]
        },
        get_object: {
          body: file_fixture('file').read
        }
      }
    }
    

    现在,如果我执行s3.buckets.first.objects.first,我会取回存根对象。

    【讨论】:

    • 为我节省了很多时间。谢谢!
    • 这对我有用!。谢谢!
    • 感谢您的提问和回答!您可能希望将list_objects_v2 添加为存根函数(与list_objects 相同的主体)。这使它对我有用,再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多