2011-01-15 11 views
27

परीक्षण कैसे एक नियंत्रक कार्रवाई है कि एक फ़ाइल भेजता है परीक्षण करने के लिए?RSpec send_file

अगर मैं controller.should_receive(:send_file) परीक्षण के साथ यह करना "टेम्पलेट मिसिंग यू" क्योंकि कुछ भी प्रदान नहीं किया जाता है के साथ विफल रहता है।

उत्तर

34

Googlingaround से, ऐसा लगता है कि render किसी भी समय भी बुलाया जाएगा .. लेकिन कोई टेम्पलेट के साथ, कोई त्रुटि नहीं होगी।

समाधान यह रूप में अच्छी तरह बाहर ठूंठ हो रहा है:

controller.stub!(:render)
+0

अच्छा, मैं क्यों इस बात का नहीं सोचा था :) – Mirko

+1

आरएसपीसी के नए संस्करणों का उपयोग करके इसे देखने वाले किसी के लिए, 'stub!' को बहिष्कृत कर दिया गया है। बस का उपयोग करें 'stub' –

+3

और Rspec 3 में, यह' (नियंत्रक) प्राप्त करें.अभियान अनुमति देने के है (: प्रस्तुत करना) ' – mehulkar

24

एक और तरीका है कि काम करता है:

controller.should_receive(:send_file).and_return{controller.render :nothing => true} 
मेरे लिए

, इस तथ्य को दर्शाता है कि send_file का उद्देश्य पक्ष प्रभाव यह व्यवस्था करना है कि कुछ भी नहीं दिया जाएगा। (हालांकि, यह बेशक थोड़ा wonky ठूंठ मूल वस्तु पर एक विधि कॉल करने के लिए लगता है।)

+0

रेल 4, RSpec 3:' 'and_return {value}' मान्य नहीं है। इसके बजाए 'and_return' के बिना 'and_return (value)' या कार्यान्वयन ब्लॉक का उपयोग करें –

6

तुम भी ऐसा कर सकते हैं:

result = get .... 

result.body.should eq IO.binread(path_to_file)