Ruby on rails 存根AWS S3对象请求

Ruby on rails 存根AWS S3对象请求,ruby-on-rails,amazon-web-services,testing,amazon-s3,aws-sdk-ruby,Ruby On Rails,Amazon Web Services,Testing,Amazon S3,Aws Sdk Ruby,我正在尝试取消一个请求,以获取AWS桶中的对象。我读过他们关于存根请求的文档,只能存根一个桶,而不是一个对象。以下是我尝试过的一些事情: 截取AWS配置: Aws.config[:s3] = { stub_responses: { list_buckets: { buckets: [name: "my-bucket"], list_objects: [key: "file.pdf"] } } } 虽然它得到了水桶,但它没有给我东西。调用s3.bu

我正在尝试取消一个请求,以获取AWS桶中的对象。我读过他们关于存根请求的文档,只能存根一个桶,而不是一个对象。以下是我尝试过的一些事情:

截取AWS配置:

Aws.config[:s3] = {
  stub_responses: {
    list_buckets: {
      buckets: [name: "my-bucket"],
      list_objects: [key: "file.pdf"]
    }
  }
}
虽然它得到了水桶,但它没有给我东西。调用
s3.bucket
将列出bucket,但
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

我的目标是确保我的视图显示了
@文件
变量中对象的链接,我想测试该链接。任何帮助都将不胜感激!我刚开始使用AWS S3进行开发,googlge并没有太大帮助。我正在使用
aws-sdk-s3
gem与aws s3一起工作。

找到了答案。我还需要去掉
#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.bucket.first.objects.first
操作,我将取回存根对象。

为我节省了很多时间。谢谢