gpt4 book ai didi

ruby-on-rails - stub AWS S3 对象请求

转载 作者:行者123 更新时间:2023-11-28 20:36:46 24 4
gpt4 key购买 nike

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

stub 通过 AWS 配置:

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

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

通过 webmock gem stub :

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 仍然会返回一个空集合。

我要测试的 Controller 中的代码:

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

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

最佳答案

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

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,我会取回 stub 对象。

关于ruby-on-rails - stub AWS S3 对象请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51530908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com