2012-09-28 38 views
5

我有一些Ruby代碼看起來像這樣:RSpec的 - 使用測試雙象塊參數

Something.create do |x| 
    x.foo = bar 
end 

我想寫它採用了雙到位塊自變量x的測試,從而使然後我可以撥打:

x_double.should_receive(:foo).with("whatever"). 

這可能嗎?

回答

8
specify 'something' do 
    x = double 
    x.should_receive(:foo=).with("whatever") 
    Something.should_receive(:create).and_yield(x) 
    # call the relevant method 
end 
+0

非常好!謝謝 – stubotnik

+3

這是一個很好的答案,但我想挑剔。 'Something.should_receive(:create)'是一個測試 - 一個斷言 - 但它並沒有斷言stubotnik說他想測試的行爲。所以我會使用'Something.stub(:create).and_return(x)'來區分測試設置和被測試的行爲,它不會斷言任何關於'Something.create'的行爲 –