2013-02-22 36 views
1

我試圖測試下面的代碼塊使用rr產量使用RR

response = RestClient.get(url, {:params => params}){|response, request, result| response } 

在香草rspec,你會做這樣的事情:

RestClient.should_receive(:get).with(url, {:params => params}).and_yield(response, request, result) 

我會怎麼做與rr相同?

設置:

let(:url) { "http://localhost/" } 
let(:params) { {:item_id => 1234, :n => 5} } 
let(:response) { Object.new } 
let(:request) { Object.new } 
let(:result) { Object.new } 

我已經試過了一堆變化:

mock(RestClient).get(url, {:params => params}) { response, request, result } 

mock(RestClient).get(url, {:params => params}, &proc/lambda{}).return(result) 

mock(RestClient).get(url, {:params => params}).yields(response, request, result) 

mock(RestClient).get(url, {:params => params}).returns do |proc_as_block| 
    response 
end 

但他們沒有工作。

回答

3

終於明白了。這拉動請求幫助:https://github.com/btakita/rr/pull/82

mock(RestClient).get(url, {:params => params}).yields(response, request, result) { response } 
+0

THX,你這個[答案]幫助(http://stackoverflow.com/a/19201353/449531),採用RR收益率的另一個例子。 – zhon 2013-10-05 18:44:54