मैं एक समारोह है, जो एक ब्लॉक को स्वीकार करता है के साथ एक ब्लॉक लेता है परीक्षण करने के लिए एक फ़ाइल, पैदावार और रिटर्न खोलता है:कैसे एक समारोह जो rspec
def start &block
.....do some stuff
File.open("filename", "w") do |f|
f.write("something")
....do some more stuff
yield
end
end
मैं इसे rspec का उपयोग कर के लिए एक परीक्षण लिखने के लिए कोशिश कर रहा हूँ । मैं File.open कैसे दबा सकता हूं ताकि यह एक वास्तविक फ़ाइल खोलने की कोशिश करने के बजाय ब्लॉक में एक ऑब्जेक्ट f (मेरे द्वारा आपूर्ति) को पास कर सके? कुछ की तरह:
it "should test something" do
myobject = double("File", {'write' => true})
File.should_receive(:open).with(&blk) do |myobject|
f.should_receive(:write)
blk.should_receive(:yield) (or somethig like that)
end
end
यह इस परीक्षण करने के लिए, क्योंकि जो आप परीक्षण करना चाहते विधि करने के लिए आंतरिक है मुश्किल है। आपकी फ़ाइल विधि के बाहर किसी भी चीज़ के साथ कैसे सहभागिता करती है? आपके उदाहरण से, आप विधि के बाहर फ़ाइल का उपयोग नहीं करते हैं, और आप इसे भी उपज नहीं करते हैं। अगर इस फ़ंक्शन के बाहर कुछ फ़ाइल की आवश्यकता है, तो हो सकता है कि आपको फ़ाइल ऑब्जेक्ट को विधि (निर्भरता इंजेक्शन) में पास करने पर विचार करना चाहिए। फिर आप फ़ाइल को कोई समस्या नहीं बना सकते हैं। अगर आपको उस फाइल के बारे में कुछ परीक्षण करने की ज़रूरत है, तो शायद आपको इसे अलग तरीके से तोड़ने पर विचार करना चाहिए? – Raj
धन्यवाद ... ऐसा ही कुछ, कई तरीकों में टूट किया था, File.stub (खुला) .and_yield (my_double), आदि – constantine1