Я пытаюсь заглушить запрос на получение объекта в ведре AWS. Я читал их документы о заглушках запросов и смог заглушить только ведро, а не объект. Вот кое-что, что я пробовал:
Пробиваем через конфиг AWS:
Aws.config[:s3] = {
stub_responses: {
list_buckets: {
buckets: [name: "my-bucket"],
list_objects: [key: "file.pdf"]
}
}
}
Пока тот получил ведро, он не дал мне предмета. При вызове s3.buckets
ведро будет отображено, но s3.objects
будет пустым.
Прошивка через гем webmock
:
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
для работы с 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.buckets.first.objects.first
, я верну заглушенный объект.
Сэкономил мне много времени. Спасибо!