【发布时间】:2018-04-10 08:49:27
【问题描述】:
我正在尝试使用 AWS Ruby SDK response stubs 来测试我与 S3 交互中的一些错误处理。
我已经能够存根一个简单的put_object 案例,但由于某种原因我不能存根presigned_url。请务必注意,我使用的是旧版本的 SDK。
# Gemfile
gem 'aws-sdk', '2.3.22'
describe 'Stubbing AWS' do
module S3Helper
def self.presigned_url(object_key:, client:)
resource = ::Aws::S3::Resource.new(:client => client)
bucket = resource.bucket('my-great-bucket')
bucket
.object(object_key)
.presigned_url(:get)
end
end
it 'should allow me to stub signed_url' do
test_client = Aws::S3::Client.new(
:access_key_id => ENV['SECRET_ACCESS_KEY_ID'],
:secret_access_key => ENV['SECRET_ACCESS_KEY'],
:region => ENV['AWS_REGION']
)
test_client.stub_responses(:get_object 'NotFound')
expect do
S3Helper.presigned_url(
object_key: 'my-key',
client: client
)
end.to raise(/NotFound/)
end
end
测试失败是因为响应没有触发NotFound 错误,尽管我可以清楚地看到在应用程序日志中发出了get_object 请求(并且返回了虚假响应)。
我目前正在通过将一个模拟客户端传递给我的服务并删除 object 和 presigned_url 方法来解决这个问题,但我更愿意让 SDK 为我做模拟。我错过了什么?
【问题讨论】: