परीक्षण विफलता से जुड़े पूर्ण ट्रेस देने के लिए rspec-2 कैसे प्राप्त करें?


96

अगर मुझे rake specकोई त्रुटि मिलती है तो मैं अभी अपना टेस्ट सूट चलाता हूं :

1) सेगमेंटसंट्रोलर GET 'इंडेक्स' को काम करना चाहिए
   विफलता / त्रुटि: 'इंडेक्स' प्राप्त करें
   # के लिए अपरिभाषित विधि `लोकेल’
   # ./spec/controllers/seolution_controller_spec.rb:14:
      `ब्लॉक (3 स्तरों) में '

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

समस्या यह है कि ट्रेस बहुत मददगार नहीं है। मुझे पता है कि यह segments_controller_spec.rbलाइन 14 में टूट गया था, लेकिन यह वह जगह है जहां मैं परीक्षण कहता हूं:

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

मैं वास्तविक लाइन ब्रेकिंग और पूर्ण ट्रेस करना पसंद करूंगा, न कि कल्पना फ़ोल्डर में भाग।

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


2
Check spin.atomicobject.com/2010/12/28/rspec-backtrace-filtering डिफ़ॉल्ट RSpec बैकट्रेस फ़िल्टरिंग को बदलने का एक तरीका है
Bohdan

जवाबों:


244

-bपूर्ण बैकट्रैक देखने के लिए आपको विकल्प के साथ rspec चलाना होगा


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

और fwiw अगर आप स्पार्स और गार्ड के साथ rspec का उपयोग करते हैं, तो आप एक .rspec फ़ाइल बना सकते हैं और इसमें -b जोड़ सकते हैं आउटपुट प्राप्त करने के लिए जब आप अपना टेस्ट सूट चलाते हैं
shicholas

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

यह त्रुटि के बारे में स्टैक ट्रेस जानकारी नहीं दिखाता था। दरअसल, यह rspec मणि के स्टैक ट्रेस से पता चला है
Aleksandrus

RSpec 3 के लिए भी काम करता है
Koen।

29

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

--colour
--backtrace

जो आपको पूरा बैकट्रेस देगा। उम्मीद है की यह मदद करेगा।


हाँ! मुझे ठीक इसी की आवश्यकता थी। स्टैक ट्रेस वास्तविक त्रुटि के लिए अटकल नहीं है।
डिएगसलाज़र

मेरा मानना ​​है कि उपयुक्त वर्तनी है color। मुझे लगता है कि अगर आप इसे colourएक मोंटी पायथन का मजाक
उड़ाते हैं,

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

2
कि बोनट में एक स्पैनर फेंका गया है!
अंडाकार


2

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

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

लगता है कि rspec 2.x में वह विकल्प नहीं है।
माइकल यगुडेव

1

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

एक और टर्मिनल सत्र खोलें और चलाएं:

tail -f log/test.log

फिर टर्मिनल सत्र पर वापस जाएं और केवल उस युक्ति को चलाएं जिसमें त्रुटि थी:

bin/rspec -b spec/requests/posts/index_spec.rb

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


0

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

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

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

1
@bat हाँ यह एक अंतिम उपाय है और @bat ने कहा कि एक बार जब आपको यह पता चल जाता है तो इसे हटाने की आवश्यकता होती है। हमेशा git diffयह करने से पहले याद रखें कि यह आपके बेकन को बचाएगा।
माइकल यगुडेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.