2012-12-21 5 views
10

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

मुझे विश्वास है कि डिफ़ॉल्ट रूप से आरएसपीईसी ऐसा करने वाला है लेकिन ऐसा लगता है कि यह मेरे लिए नहीं कर रहा है। उदाहरण के लिए, अगर मैं चलाने rspec spec/my_spec.rb:132 (सिर्फ एक परीक्षण L132 पर है चलाने), मैं इस उत्पादन प्राप्त करें:

Failure/Error: @f.has_changed?("test").should be_true 
    expected: true value 
     got: false 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-expectations-2.12.1/lib/rspec/expectations/fail_with.rb:33:in `fail_with' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-expectations-2.12.1/lib/rspec/expectations/handler.rb:33:in `handle_matcher' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-expectations-2.12.1/lib/rspec/expectations/syntax.rb:53:in `should' 
# /Users/JackFranklin/Dropbox/Sites/rubygems/filefixtures/spec/filefixtures_spec.rb:137:in `block (4 levels) in <top (required)>' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:114:in `instance_eval' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:114:in `block in run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:254:in `with_around_each_hooks' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:111:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:388:in `block in run_examples' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:384:in `map' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:384:in `run_examples' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:369:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `block in run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `map' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `block in run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `map' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `block (2 levels) in run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `map' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `block in run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/reporter.rb:34:in `report' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:25:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/runner.rb:80:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/runner.rb:17:in `block in autorun' 

कौन सा, जैसा कि आप देख सकते हैं, पूरी तरह से बड़े पैमाने पर है। मुझे कोई आरएसपीईसी कॉन्फ़िगरेशन फाइल नहीं मिली है जो आरएसपीसी को पारित कॉन्फ़िगरेशन को बदल सकती है।

क्या किसी ने इसे पहले देखा है? मैंने गूगलिंग की कोशिश की है लेकिन खोज निष्फल रही है।

संपादित करें: मैं तो यकीन है कि यह डिफ़ॉल्ट पश्व-अनुरेखन सफाई लागू करने गया था बनाने के लिए config की स्थापना:

RSpec.configure do |config| 
    # RSpec automatically cleans stuff out of backtraces; 
    # sometimes this is annoying when trying to debug something e.g. a gem 
    config.backtrace_clean_patterns = [ 
    /\/lib\d*\/ruby\//, 
    /bin\//, 
    /gems/, 
    /spec\/spec_helper\.rb/, 
    /lib\/rspec\/(core|expectations|matchers|mocks)/ 
    ] 
end 

लेकिन यह एक फर्क नहीं है। आउटपुट को देखते हुए, इसमें से अधिकांश को फ़िल्टर किया जाना चाहिए, लेकिन ऐसा लगता है कि कॉन्फ़िगरेशन लागू नहीं किया जा रहा है?

संपादित फिर से:

मेरी config में, मैं भी cleaned_from_backtrace?(line) चलाने देखने के लिए अगर एक लाइन साफ ​​किया जाना चाहिए कर सकते हैं। यह true रिटर्न:

config.cleaned_from_backtrace?("/Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-expectations-2.12.1/lib/rspec/expectations/fail_with.rb:33:in `fail_with'") 

लेकिन टर्मिनल में वास्तविक उत्पादन एक ही रहता है!

संपादित करें 3:

मैं आदेश rspec, और ज्यादा कुछ नहीं के साथ RSpec चल रहा हूँ। परियोजना की .rspec फ़ाइल है:

--color 
--format progress 

और कोई ~/.rspec फ़ाइल है कि या तो सेटिंग्स लागू किया जा सकता है नहीं है।

उत्तर

11

तो आरएसपीसी लोक on Github के साथ थोड़ा और चैट करने के बाद, मैंने समस्या का शिकार करने में कामयाब रहे।

समस्या यह थी कि डिफ़ॉल्ट रूप से, आरएसपीईसी रेगेक्स/रत्न/से मेल खाने वाले बैकट्रैक से लाइनों को हटा देता है। मेरे पास gems नाम के साथ एक फ़ोल्डर के भीतर मेरा प्रोजेक्ट था: ~/Dropbox/rubygems/myproject, इसलिए बैकट्रैक की हर पंक्ति हटा दी जा रही थी, और जब ऐसा होता है, तो आरएसपीसी समझदारी से आपको संपूर्ण बैकट्र्रेस दिखाती है।

यह उस व्यवहार को बताता है जो मैं देख रहा था।

यह हमेशा ऐसा कुछ मूर्खतापूर्ण है। मुझे आशा है कि अगर कोई और ऐसा करता है, तो शायद यह जवाब उन्हें कुछ समय बचाएगा।

+0

हाहा वह शानदार है। मैं हमेशा नाराज हूं कि आरएसपीईसी इतनी वर्बोज़ थी ... मुझे पता नहीं था कि मेरा नाम ज़िम्मेदार था! – RobinGower

+0

कस्टम बैकट्रैस फ़िल्टर पैटर्न जोड़ने के लिए आप https://www.relishapp.com/rspec/rspec-core/docs/configuration/excluding-lines-from-the-backtrace का उपयोग कर सकते हैं। –

3

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

+0

धन्यवाद जिम - लेकिन मुझे विश्वास है कि मैं 'b' विकल्प कहीं भी आवेदन नहीं कर रहा हूँ हूँ - मैंने इसे और अधिक स्पष्ट रूप से दिखाने के लिए अभी अपना प्रश्न अपडेट कर लिया है। –

1

जैसा कि जिम ने कहा, -b या --backtrace विकल्प है जो पूर्ण बैकट्रैक को सक्षम करेगा। ध्यान रखें कि यह केवल .rspec फ़ाइल नहीं है जो इसे ट्रिगर कर सकती है; ~/.rspec भी है (डेवलपर के पसंदीदा विकल्पों के लिए)।

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

अंत में, यदि यह उन चीजों में से एक नहीं है, तो मैं विचारों से बाहर हूं। आपके प्रश्न का उत्तर देने के लिए मुझे एक उदाहरण देना होगा। क्या आप एक पुनरुत्पादित उदाहरण के साथ आ सकते हैं (एक जिस्ट में, उम्मीद है)? मैं नियमित रूप से irc.freenode.net के आरएसपीसी चैनल में लटकने की कोशिश करता हूं, तो शायद आप मुझे वहां पकड़ सकें और हम इस तरह से कुछ समस्या निवारण कर सकते हैं।

+0

मैंने अपना प्रश्न अपडेट कर लिया है - मेरे पास प्रोजेक्ट में '.rspec' है लेकिन यह बैकट्रैक से संबंधित कोई भी चीज़ नहीं चला रहा है, और कोई भी '~/.rspec' नहीं है। –

0

संस्करण 3.4.0/2015/11/11 से यह विकल्प द्वारा पश्व-अनुरेखन फिल्टर करने के लिए संभव है:

RSpec.configure do |config| 
    config.filter_rails_from_backtrace! 
end 
संबंधित मुद्दे