2012-08-03 11 views
7

क्या ककड़ी परिदृश्य को असफल करने के लिए मजबूर करने का कोई तरीका है?कैसे ककड़ी परिदृश्य को असफल करने के लिए मजबूर करना है?

मुझे अपने प्रत्येक परीक्षण के अंत में कुछ असफल परिदृश्यों की जांच करने की आवश्यकता है। तो मैंने सोचा कि मैं एक 'त्रुटि' संवाद के लिए जांच कर सकता हूं और फिर यह हुआ तो परीक्षण में असफल रहा।

यह नीचे दिए गए कोड के साथ संभव है हालांकि कोई समस्या है। एक बार जब मैं असफल में अपवाद उठाता हूं! फ़ंक्शन, फिर ककड़ी शेष हुक के बाकी हिस्सों को रोकती है, इसलिए लॉगआउट फ़ंक्शन को कॉल नहीं किया जाता है।

था:

After() do |scenario| 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    fail!(raise(ArgumentError.new('Unexpected Error dialog!'))) 
    end 
    logout 
end 
अब

:

After() do |scenario| 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    scenario.fail!(logout) 
    end 
end 

वहाँ एक अपवाद को ऊपर उठाने के बिना एक ककड़ी परीक्षण विफल एक बेहतर तरीका है?

उत्तर

8

आप हुक के बाद अपने सामान्य कथनों का उपयोग कर विफल प्राप्त कर सकते हैं की कोशिश करो। ! नहीं Capybara/rspec अपवादों के साथ बहुत कुछ किया है, लेकिन मुझे लगता है कि आप कर सकते हैं: यदि आप ऐसा करते या scenario.fail() करना

page.should have_selector?(:dialog_message, 1, :text => 'Error') 

हालांकि,, आप अभी भी लॉगआउट नहीं होंगे। आपको इसे प्रारंभ-सुनिश्चित ब्लॉक में लपेटने की आवश्यकता है।

इस प्रयास करें:

After do |scenario| 
    begin 
     page.should have_selector?(:dialog_message, 1, :text => 'Error') 
    ensure 
     logout 
    end 
end 

अद्यतन

आप मानक दावे फोन और सीधे परिदृश्य असफल नहीं करना चाहते हैं, तो आप निम्न कर सकते हैं - आप के बजाय fail उपयोग करने की आवश्यकता fail!:

After() do |scenario| 
    begin 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
     fail(ArgumentError.new('Unexpected Error dialog!')) 
     #Or you can just do fail('Unexpected Error dialog') if you do not care about the type. 
    end 
    ensure 
    logout 
    end 
end 
+0

धन्यवाद जस्टिन, मैंने कभी सुनिश्चित ब्लॉक का उपयोग करने के बारे में सोचा नहीं।मैं उम्मीद कर रहा था कि अपवाद को उठाए बिना परिदृश्य को विफल करने का एक तरीका होगा। – snowstreams

3

बस एक प्रारंभिक उत्तर है क्योंकि मैं इसे अभी तक जांचने में सक्षम नहीं हूं, लेकिन मुझे लगता है कि Raise को कॉल करना हमेशा निष्पादन को रोकने की गारंटी देता है (जब तक कि यह एक proc या lambda के अंदर नहीं किया जाता है, इसलिए इसका मूल्यांकन स्थगित हो जाता है) ।

बस

if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    scenario.fail!(StandardError.new('Unexpected Error Dialog!')) 
end 
logout 
+0

क्षमा करें, कोशिश 'scenario.fail ('संदेश')' –

+0

धन्यवाद, मैं त्रि वहां भी एड करें। स्ट्रिंग (NoMethodError) तो मैं इस कोशिश की: "संदेश" के लिए अपरिभाषित विधि 'संदेश ': scenario.fail (लॉग आउट) यह आधा काम किया मैं त्रुटि मिली। कम से कम यह मेरा लॉगआउट कोड चला गया और परीक्षण में विफल रहा, लेकिन यह अभी भी एक त्रुटि संदेश दिया: शून्य के लिए अपरिभाषित विधि 'संदेश': NilClass (NoMethodError) – snowstreams

+0

मैं थोड़ा उलझन में हूं जहां से यह आ सकता है - क्या आप अपडेट कर सकते हैं वर्तमान कोड के साथ सवाल जो त्रुटि उत्पन्न कर रहा है? –

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