我想嘲笑这个电话:
headers[ 'REMOTE_ADDR' ]
可以用
完成allow_any_instance_of(RequestHandler).to
receive_message_chain(:headers, :[]) do |field|
'1.2.3.4'
end
但是,我想要一个部分加倍,所以只返回field == 'REMOTE_ADDR'
的存根响应。对于其他字段,我想调用原始实现。
根据RSpec docs,
expect(API).to receive(:solve_for).and_wrap_original { |m, *args| m.call(*args).first(5) }
但是,这似乎不适用于消息链。我明白了:
undefined method `and_wrap_original' for #<RSpec::Mocks::Matchers::ReceiveMessageChain:0x007faef1f3fd20>
那么,在RSpec中创建这个部分双精度的好方法是什么?
rspec-mocks 3.4.1
答案 0 :(得分:0)
对于您的特定情况,您可以依靠with
方法根据传递的参数限定double:
allow_any_instance_of(RequestHandler).to receive_message_chain(:headers, :[]).with('REMOTE_ADDR').and_return('1.2.3.4')