2012-01-25 14 views
11

rspec-rails (2.7.0) रेल (3.0.10) पोस्ट: Rails 3.1 Error Catching मेरे लिए अप्रासंगिक है।क्यों विचार_all_requests_local rspec config

कोड:

class ApplicationController < ActionController::Base 
    unless Rails.application.config.consider_all_requests_local 
    rescue_from ActiveRecord::RecordNotFound, :with => :render_404 
    rescue_from Exception, :with => :render_500 
    rescue_from FunnyException, :with => :my_errors 

    def my_errors(exception) 
     #some stuff for production 
     puts "=======From top====#{Rails.application.config.consider_all_requests_local}" 
    end 
    else 
    rescue_from FunnyException, :with => :my_errors 
    def my_errors(exception) 
     #some stuff for development 
     puts "=====From bottom======#{Rails.application.config.consider_all_requests_local}" 
    end 
    end 
end 

इस कोड को पूरी तरह से उत्पादन/विकास के साथ काम करता है ... समस्या यह है जब मैं rspec साथ यह परीक्षण करना चाहते हैं। वातावरण के बीच परीक्षण केस कैसे स्विच करें?

मैं की तरह कुछ जोड़ने की कोशिश की:

before do 
    Rails.application.config.consider_all_requests_local = true 
end 

मैं:

... ===== नीचे से ====== सच ===== से। नीचे ====== सच। ===== नीचे से ====== सच। ===== नीचे से ====== सच

इसलिए कोशिश की

before do 
    Rails.application.config.consider_all_requests_local = false 
end 

तो मैं मिलता है:

... ===== नीचे से ====== झूठी ===== नीचे से ====== झूठी ===।। == नीचे से ====== झूठी। ===== नीचे ====== झूठी

से कैसे भी संभव है? ... spec_helper

config.before(:each) do 
    Rails.application.config.consider_all_requests_local = false 
end 

बदलने के साथ ही काम नहीं कर रहा है। शीर्ष अनुभाग rspec के साथ पहुंच योग्य नहीं है ... हमेशा हिट क्यों? मुझे लगता है कि यह किसी भी तरह से रैक के साथ बंधे हैं ... लेकिन क्या इस व्यवहार को rspec के अंदर गतिशील रूप से बदलने का कोई समाधान है?

संबंध

उत्तर

21

ठीक है, मैं काफी आसान समाधान पाया

before do 
    Rails.application.config.consider_all_requests_local = false 
    load "application_controller.rb" 
end 

after do 
    Rails.application.config.consider_all_requests_local = true 
    load "application_controller.rb" 
end 

यह अनाम एप्लिकेशन नियंत्रक टेस्ट स्वीट का हिस्सा है।

आपको ब्लॉक के बाद जोड़ना होगा ... क्योंकि यह परिवर्तन अन्य सुइट्स के माध्यम से जारी रहेगा।

किसी भी सुधार का स्वागत करते हैं: डी

संपादित करें: मेरे लिए spork और गार्ड का कारण बनता है का उपयोग करते हुए कभी कभी यादृच्छिक त्रुटियों ... से पहले: यह सब समस्या

+3

मुझे यकीन नहीं है कि मेरी स्थिति एक जैसी है, लेकिन मुझे पहले ब्लॉक में 'Rails.application.config.action_dispatch.show_exceptions = true' जोड़ना पड़ा। और बाद में '... = झूठी'। –

+0

कमाल का समाधान, ठीक वही जो मैं खोज रहा था। धन्यवाद! –

+2

जब मैं 'रेक स्पेक' का उपयोग कर पूर्ण सूट चला रहा हूं तो यह मेरे लिए असफल रहा है। यह केवल तभी गुजरता है जब मैं विशिष्ट 'फीचर' spec चलाता हूं .. –

0

तर्क ब्लॉक श्रेणी स्तर है, जो वर्ग लोड समय के दौरान का मूल्यांकन किया जाता है पर परिभाषित किया गया है। यही कारण है कि यह 'अन्य' पर नहीं जाएगा, भले ही आप इसे रन टाइम पर मैन्युअल रूप से गलत पर सेट करते हैं।

मुझे यह जानकर भी उत्सुकता है कि इसका परीक्षण करने का सबसे अच्छा तरीका क्या है। मेरा एकमात्र सुराग किसी भी तरह से पुनः लोड या फिर से लोड करने के समान एक्शनकंट्रोलर eval है! रेल कंसोल में विधि।

0

मैंने पाया हल करने के लिए लगता है कि सही तरीके से ककड़ी-रेल के साथ ऐसा करने के लिए @ अनुमति-बचाव टैग जोड़ना है।