【问题标题】:Stubbing S3 presigned_url in AWS SDK v2在 AWS SDK v2 中存根 S3 presigned_url
【发布时间】: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 请求(并且返回了虚假响应)。

我目前正在通过将一个模拟客户端传递给我的服务并删除 objectpresigned_url 方法来解决这个问题,但我更愿意让 SDK 为我做模拟。我错过了什么?

【问题讨论】:

    标签: ruby aws-sdk


    【解决方案1】:

    我认为你没有正确地存根响应。

    试试这个方法:

    test_client.stub_responses(:get_object, 'NotFound')
    

    从文档中,我看到 stub_responses 方法接受参数数组,而不是哈希。

    【讨论】:

    • 我认为您对语法的看法是正确的(我会更新我的问题),但这仍然不会影响客户端的结果
    猜你喜欢
    • 2021-04-18
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2021-10-27
    • 2015-04-23
    • 2015-04-18
    相关资源
    最近更新 更多