你可以试试这个:
original_get_response = Net::HTTP.method(:get_response)
Net::HTTP.stub(:get_response) do |uri|
(uri.to_s == 'http://google.de') ? FakeResponse.new : original_get_response.call(uri)
end
看看and_call_original
一年前关于加法的讨论,似乎像这样存储和调用原始方法是一个很常见(但很尴尬)的习惯用法。(现在可能有一个original_method
电话可供您使用,但我没有方便的构建来测试它。)
编辑:后来,我开始构建并尝试简单地使用.with(URI('...'))
,效果很好。除非我误解了这个问题?
require 'spec_helper'
require 'net/http'
describe :nethttp do
before :each do
Net::HTTP.stub(:get_response).and_return('something')
Net::HTTP.stub(:get_response).with(URI('http://www.google.com')).and_return('something else')
end
it { Net::HTTP.get_response(URI('http://www.google.com')).should eql 'something else' }
it { Net::HTTP.get_response(URI('http://www.google.co.uk')).should eql 'something' }
end