我需要将请求存根到一个外部API,使用webmock/webmock,但我需要测试一些响应(200、404、503等)。干净地做这件事最好的方法是什么?我第一个讨厌的想法是,您可以在标题中设置一些独特的内容,比如一个惟一的用户代理字符串,以输入它,但它会导致我编写这样糟糕的代码:
# 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,但据我所知,很难用它来模拟和捕获错误。是否有另一种简洁明了的方法来存根处理多个响应代码的请求?谢谢!
发布于 2016-05-19 15:38:14
无论您使用什么库来生成HTTP请求,都有一种返回响应状态的方法。我将使用使用RSpec存根对库进行存根,以返回每个示例中所需的状态(以及有关响应的任何其他内容)。除了需要比webmock方法更少的代码之外,这还具有这样的优势:您需要阅读的所有理解每个示例的内容都在示例中,而不是在spec_helper.rb中。
如果这还不清楚,请随意添加提出请求的代码到您的问题,我可以给出一个例子,如何在这里存根。
我根本不担心需要返回错误状态的规范中的webmock;它仍然会阻止您发出HTTP请求,但您不会这样做,因为您会将它们排除在外。
https://stackoverflow.com/questions/37327213
复制相似问题