我需要使用 webmock/webmock 对外部 API 的请求存根,但我需要测试少数响应(200、404、503 等)。干净地做到这一点的最佳方法是什么?我的第一个 hacky 想法是你可以在标题中设置一些独特的东西,比如一个唯一的 User-Agent 字符串,以键入,但它导致我编写像这样的糟糕代码:
# spec/spec_helper.rb
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
require 'the_geek'
require 'webmock/rspec'
WebMock.disable_net_connect!(allow_localhost: true)
RSpec.configure do |config|
config.before(:each) do
stub_request(:get, /www.boardgamegeek.com/).
with(headers: {'Accept'=>'*/*', 'User-Agent'=>'SOME 200 STRING'}).
to_return(status: 200, body: "stubbed response", headers: {})
stub_request(:get, /www.boardgamegeek.com/).
with(headers: {'Accept'=>'*/*', 'User-Agent'=>'SOME 404 STRING'}).
to_return(status: 404, body: "Not Found", headers: {})
stub_request(:get, /www.boardgamegeek.com/).
with(headers: {'Accept'=>'*/*', 'User-Agent'=>'SOME 503 STRING'}).
to_return(status: 503, body: "Not Found", headers: {})
end
end
我看过 VCR,但据我了解,很难用它来模拟和捕获错误。是否有另一种简洁明了的方法来消除对多个响应代码的请求?谢谢!