2016-03-01 31 views
1

我想嘲笑這一呼籲:什麼是RSpec中receive_message_chain和and_wrap_original的好方法?

​​

它可以與

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中創建這個部分double的好方法?

rspec的,嘲笑3.4.1

+0

你嘗試過:'期待(頭文件).to接收(:[])。('REMOTE_ADDR').and_return('1.2.3.4')'? –

+0

查看模擬方法的文檔:https://www.relishapp.com/rspec/rspec-mocks/docs – Vincent

回答

0

爲您的特定情況下,你可以依靠with方法基於參數來限定雙傳遞:

allow_any_instance_of(RequestHandler).to receive_message_chain(:headers, :[]).with('REMOTE_ADDR').and_return('1.2.3.4')

相關問題