2012-09-28 4 views
5

मैं कुछ रूबी कोड है जो इस तरह दिखता है: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' के व्यवहार के बारे में कुछ भी नहीं कह रहा है। –