2011-10-04 5 views
90

अभी अगर मैं अपने टेस्ट स्वीट rake spec का उपयोग कर चलाए मैं एक त्रुटि मिलती है:परीक्षण विफलता से जुड़े पूर्ण ट्रेस देने के लिए rspec-2 कैसे प्राप्त करें?

 
1) SegmentsController GET 'index' should work 
    Failure/Error: get 'index' 
    undefined method `locale' for # 
    # ./spec/controllers/segments_controller_spec.rb:14: 
     in `block (3 levels) in ' 

यह सामान्य है मैं एक त्रुटि :) है के रूप में

समस्या यह है कि ट्रेस बहुत मददगार नहीं है । मैं इसे segments_controller_spec.rb में, लाइन 14 तोड़ दिया है, लेकिन यह सिर्फ मैं कहाँ परीक्षण कहते हैं:

### segments_controller_spec.rb:14 
get 'index' 

मैं वास्तविक लाइन तोड़ने और पूरा पता लगाने, नहीं कल्पना फ़ोल्डर में हिस्सा देखना पसंद करेंगे।

--trace के साथ चलने में मदद नहीं करता है।

+2

चेक http://spin.atomicobject.com/2010/12/28/rspec-backtrace-filtering/ – Bohdan

+0

छानने डिफ़ॉल्ट RSpec पश्व-अनुरेखन बदलने के लिए एक तरीका है @ बोहडन पोहोरिलेट्स ऐसा लगता है कि मैं क्या देख रहा हूं! इसे अभी आज़माकर लेकिन इसे एक टिप्पणी के रूप में क्यों छोड़ दें, आपको एक उत्तर छोड़ना चाहिए ^^ – marcgg

+0

परीक्षण नहीं किया गया है, मुझे यकीन नहीं है कि यह काम करता है या नहीं। – Bohdan

उत्तर

234

पूर्ण बैकट्रैस

+0

काम करता है और निश्चित रूप से * सबसे आसान * विकल्प –

+0

यूप, -बी जाने का सबसे आसान तरीका है। +1 – codecraig

+8

मुझे यह नहीं मिला, न तो यह या स्वीकार्य उत्तर आपको अपनी spec फ़ाइल से आगे पीछे देता है। या यह केवल मेरे लिए काम नहीं करता है o_O –

29

एक और (आसान) विकल्प .rspec फाइल को संपादित, और backtrace विकल्प जोड़ने के लिए है देखने के लिए -b विकल्प के साथ rspec चलाना चाहिए। यह इस तरह कुछ हद तक दिखना चाहिए:

--colour 
--backtrace 

है कि आप पूर्ण पश्व-अनुरेखन दे देंगे। उम्मीद है कि यह मदद करता है।

+0

हां! मुझे ठीक इसी की आवश्यकता थी। वास्तविक त्रुटि के लिए स्टैक ट्रेस स्पेक स्टैक नहीं। – DiegoSalazar

+0

मेरा मानना ​​है कि उपयुक्त वर्तनी 'रंग' है। मुझे लगता है कि अगर आप इसे 'रंग' लिखते हैं तो मॉन्टी पायथन मजाक – WattsInABox

+2

उपयुक्त हो सकता है यदि आप अमेरिका से हैं। यूके में वे रंग लिखते हैं, और आरएसपीसी लोग दोनों को अनुमति देने के लिए बहुत दयालु हैं;) – nathanvda

2

एक और तरीका spec_helper.rb में सभी बैकट्रैक बहिष्करण पैटर्न को साफ़ करना है। मुझे इस समाधान को सबसे ज्यादा पसंद है क्योंकि मैं एक ही स्थान पर सभी आरएसपीसी सेटिंग्स को रखने में सक्षम हूं और .rspec file या से .travis.yml में छुटकारा पा रहा हूं।

# spec_helper.rb 
RSpec.configure do |config| 
    config.backtrace_exclusion_patterns = [] 
end 
+0

ऐसा लगता है कि rspec 2.x में वह विकल्प नहीं है। –

0

एक और विकल्प है जब बाकी सब विफल रहता है सिर्फ एक बचाव ब्लॉक जोड़ सकते हैं और प्रिंट आउट ढेर कोशिश या वहाँ एक बाध्यकारी जिज्ञासा बयान जोड़ सकते हैं और show-stack उपयोग करने के लिए है।

rescue Exception => e 
    puts "" 
    puts e.backtrace 
    puts "" 
+0

यह कभी-कभी सबसे अच्छा विकल्प होता है। बस यह सुनिश्चित करें कि आप इसे काम करने के बाद इसे हटा दें। यह उस स्थान को लपेटना चाहिए जहां आप त्रुटि की अपेक्षा करते हैं। शायद 'स्टार्ट' और 'बचाव' ब्लॉक को नियंत्रक की क्रिया विधि के बाहरी विवरण के रूप में रखें। या 'rescue_from' का उपयोग करें। –

+1

@bat हाँ यह आखिरी उपाय प्रयास है और जैसे कि @ बीट ने कहा कि इसे निकालने के बाद हटा दिया जाना चाहिए। इसे करने से पहले हमेशा अपना 'गिट diff' करना याद रखें, यह आपके बेकन को बचाएगा। –

0

मुझे नहीं पता कि rspec में नियंत्रक त्रुटि को कैसे दिखाया जाए। कभी-कभी यह दिखाता है लेकिन मुझे नहीं पता कि किन स्थितियों को दिखाना है।

खुला एक और टर्मिनल सत्र और चलाएँ::

tail -f log/test.log 

फिर टर्मिनल सत्र के लिए वापस जाओ और सिर्फ कल्पना है कि त्रुटि थी चलाएँ:

यहाँ हालांकि काफी जल्दी त्रुटि को देखने के लिए एक रास्ता है
bin/rspec -b spec/requests/posts/index_spec.rb 

लॉग की पूंछ पर वापस जाएं और आपको त्रुटि को देखना चाहिए, उम्मीद है कि इसके आस-पास की बहुत सारी चीजें बिना (क्योंकि आप स्वयं असफल परीक्षण चलाते हैं)।

3

यह भी काम करेगा:

# rails_helper.rb 
RSpec.configure do |config| 
    config.full_backtrace = true 
end