2012-04-17 6 views
6

मैं products_controller_spec.rb में यह कल्पना लिखा है में न के बराबर रिकॉर्ड प्राप्त करने के लिए, कि एक रीडायरेक्ट का परीक्षण करने का इरादा है जब नष्ट किसी गैर-मौजूद रिकॉर्ड पर कहा जाता है:RecordNotFound उठाया जब find_by_id का उपयोग कर RSpec

it "deleting a non-existent product should redirect to the user's profile page with a flash error" do   
    delete :destroy, {:id => 9999} 
    response.should redirect_to "/profile" 
    flash[:error].should == I18n.t(:slideshow_was_not_deleted) 
end 

यहाँ products_controller.rb में नियंत्रक कार्रवाई है:

अब, मैं कल्पना पहली बार पारित करने के लिए उम्मीद नहीं थी लेकिन मुझे समझ नहीं आता क्यों यह इस के साथ नाकाम रहने है:

Failure/Error: delete :destroy, {:id => 9999} 
ActiveRecord::RecordNotFound: 
    Couldn't find Product with id=9999 

मैं इस धारणा के तहत था कि #find_by_id एक गैर-मौजूदा रिकॉर्ड पर RecordNotFound त्रुटि वापस नहीं करेगा। तो मुझे एक क्यों मिल रहा है? अग्रिम में धन्यवाद!

+1

रेल का कौन सा संस्करण आप उपयोग करते हैं? यह 'find_by_id' रेल 3.2.3 के साथ ठीक काम करता है। (रिकॉर्ड नॉटफाउंड बढ़ाने के बजाए शून्य लौट रहा है) – Deradon

+0

3.2.2 यहां। मुझे उस find_by_id को ब्राउज़र में जोड़ना चाहिए। मैं केवल spec परिणामों में RecordNotFound प्राप्त कर रहा हूँ। – theflyingbrush

+0

- दरअसल, एक गैर-मौजूदा रिकॉर्ड पर एक शो एक्शन के साथ ब्राउजर में बस कोशिश की और रिकॉर्ड नॉटफाउंड मिला। जब मैंने नियंत्रक में कैनकन प्रमाणीकरण की टिप्पणी की तो दूर चला गया। ऐसा लगता है कि कैनकन आरएनएफ – theflyingbrush

उत्तर

16

कैनकन द्वारा रिकॉर्ड नॉटफाउंड त्रुटि फेंक दी जा रही थी। यह नियंत्रक कार्रवाई के भीतर से बचाव योग्य नहीं है (संभवत: यह कार्रवाई चलाने से पहले होता है)।

it "deleting a non-existent product should result in a RecordNotFound Error" do   
    product_id = 9999 
    expect { delete :destroy, {:id => product_id}}.to raise_error ActiveRecord::RecordNotFound 
end 

या, 2. कैनकैन like this पैच:

  1. को कल्पना को परिवर्तित करना - वहाँ दो इसे हल करने के तरीके थे।

    मुझे पैचिंग मार्ग पसंद नहीं आया, इसलिए मैं विकल्प 1 के लिए गया।

संबंधित मुद्दे