2009-01-28 12 views
5

क्या रेल में आवेषण निर्दिष्ट करने का एक अंतर्निहित तरीका है जो एक अपवाद फेंक देगा यदि एक आविष्कार विकास और परीक्षण के दौरान टूट गया है?मॉडल या नियंत्रकों से रेल में आवेषण?

संपादित करें: बस स्पष्ट होने के लिए, मैं उन आवेषणों की तलाश में हूं जिन्हें मॉडल या नियंत्रकों में रखा जा सकता है क्योंकि आप यूनिट परीक्षणों के लिए उपयोग करेंगे।

उत्तर

9

यदि आप परीक्षण लिख रहे हैं तो कई जोरदार कार्य हैं। लेकिन मुख्य कोड में assertiona के लिए, कोई भी नहीं हैं और आप आसानी से रोल कर सकते हैं।

environment.rb को कुछ इस तरह करें:

class AssertFailure < Exception 
end 

def assert(message = 'assertion failed') 
    unless block_given? and yield 
    raise message 
    end 
end 

और यह आपके environments/production.rb में नो-सेशन बनाने के तो वहाँ कम से कम भूमि के ऊपर है

def assert(message = 'assertion failed') 
end 

फिर, अपने कोड में, आप करने के लिए जोर कर सकते हैं आपके दिल की सामग्री:

assert { value == expected_value } 
assert('value was not what was expected') { value == expected_value } 

यदि valueexpected_value के बराबर नहीं है और आप उत्पादन में नहीं चल रहे हैं, एक अपवाद उठाया जाएगा।

+0

मुझे यकीन नहीं है कि अगर कार्य विधि का उद्देश्य उपरोक्त AssertFailure क्लास का तरीका है या नहीं। ऐसा लगता है कि ऐसा नहीं होना चाहिए, लेकिन अगर मैं उस कोड का उपयोग करता हूं तो मुझे "अप्रत्याशित $ अंत, कीवर्ड_एंड की उम्मीद" त्रुटि मिलती है। क्या आप कृपया विस्तार से बता सकते हैं और संकेत दे सकते हैं कि उपयोग के लिए आवश्यकता/आवश्यकता की आवश्यकता है या नहीं? (यह भी - यह अनुप्रयोग कार्यान्वयन के एक हिस्से की तरह लगता है - तो कॉन्फ़िगरेशन निर्देशिका इस तरह के कोड के लिए उपयुक्त जगह है?) – DavidJ

+0

मुझे लगता है कि 'वर्ग' लाइन के तुरंत बाद 'एंड' लाइन होना चाहिए। – dubek

+0

क्या आप समझा सकते हैं कि कक्षा घोषणा क्या कर रही है? यह कैसे खेलता है? –

1

these से परे, आपका मतलब है?

+0

मेरा मानना ​​है कि ओपी मुख्य दावे में आवेषण के बारे में बात कर रहा है, परीक्षण परीक्षणों के विपरीत। –

+0

मुश्किल कहना है, है ना? :) –

+0

थोड़ा, हाँ;) –

0

अपवाद उठाएं, और rescue_from का उपयोग करें।

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