2010-03-01 15 views
26

मैं rspec परीक्षण में त्रुटि की अपेक्षा करने की कोशिश कर रहा हूं।rspec परीक्षणों में त्रुटियों की अपेक्षा

lambda {Participant.create!({:user_id => three.id, :match_id => match.id, :team => 1})}.should raise_error StandardError 

अभी के लिए मैं सिर्फ StandardError उपयोग कर रहा हूँ यकीन है कि यह काम कर रहा है।

1) StandardError in 'Participant should never allow more participants than players'. 
    This game is already full. Cannot add another player. 
/home/josiah/Projects/Set-Match/app/models/participant.rb:12:in `do_not_exceed_player_count_in_match' 
./spec/models/participant_spec.rb:24: 

यह स्पष्ट रूप से त्रुटि फेंकता है, लेकिन मेरा परीक्षण अभी भी विफल रहता है।

विचार?

उत्तर

34

आपका वाक्यविन्यास सही दिखता है। इसे डीबग करने के लिए, यह सुनिश्चित करने के लिए सरल बनाएं कि आपका स्पेस सही ढंग से कोड किया गया हो।

it "should raise an error" do 
    lambda {raise "boom"}.should raise_error 
end 

और फिर इसे तोड़ने तक और अधिक विवरण जोड़ें।

lambda {raise "boom"}.should raise_error(RuntimeError) 
lambda {raise StandardError.new("boom")}.should raise_error(StandardError) 
+0

धन्यवाद उपयोग करना संभव है। –

5

मैं एक ही लक्षणों के साथ लड़ने के लिए किया था:

def boom 
    raise "boom" 
end 
boom.should raise_error 

परीक्षण ऊपर विफल रहता है क्योंकि raise_error की आवश्यकता है should एक Proc पर कहा जा (तकनीकी कारणों की वजह से, मुझे लगता है)। इस प्रकार, एक लैम्ब्डा के साथ एक विधि कॉल लपेटकर बस ठीक काम करता है:

lambda { boom }.should raise_error 

दुर्भाग्य से, प्रलेखन कि स्पष्ट रूप से नहीं कहा गया है और वहाँ कोई RSpec अपवाद है कि इस व्यवहार का पता चलता है है। इसके लिए two year old ticket है।

+2

"boom.should raise_error" विफल रहता है क्योंकि "चाहिए" करने से पहले बूम का मूल्यांकन किया जाता है; दूसरी तरफ, लैम्ब्डा को "चाहिए" द्वारा बुलाया जाता है। – grilix

45
कुछ समय के बाद से

, लेकिन कम से कम RSpec 2.5 में, यह टिप के लिए

expect {raise 'boom'}.to raise_error(RuntimeError, /boom/) 
संबंधित मुद्दे