我正在尝试使用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为我做嘲弄。我错过了什么?
答案 0 :(得分:0)
我认为你没有正确地纠正错误。
尝试这种方式:
test_client.stub_responses(:get_object, 'NotFound')
从文档中,我看到stub_responses
方法接受一个参数数组,而不是哈希值。