2008-10-01 11 views
25

मुझे हमारे रेल ऐप में एक परीक्षण लटका है, यह पता नहीं लगा सकता कि कौन सा (क्योंकि यह विफल रहता है और विफलता रिपोर्ट नहीं मिलता है)। मुझे यह ब्लॉग पोस्ट http://bmorearty.wordpress.com/2008/06/18/find-tests-more-easily-in-your-testlog/ मिला है जो परीक्षण नाम मुद्रित करने के लिए एक सेटअप हुक जोड़ता है लेकिन जब मैं वही काम करने का प्रयास करता हूं तो यह मुझे त्रुटि के लिए तर्कों की गलत संख्या (0 के लिए 1) कहने में त्रुटि देता है। किसी भी मदद के लिए आभारी होंगे।रेल परीक्षण लटकाना - निष्पादन से पहले मैं परीक्षण नाम कैसे मुद्रित कर सकता हूं?

उत्तर

38

यह काम करेंगे आप रेक का उपयोग कर परीक्षण चलाते हैं:

rake test:units TESTOPTS="-v" 
0

आप किस परीक्षण ढांचे का उपयोग कर रहे हैं? टेस्ट/यूनिट?

मैं आरएसपीसी पर एक नज़र डालेगा जो आपके परीक्षणों के लिए थोड़ा और संदर्भ प्रदान करेगा। तुम भी एक अच्छा एचटीएमएल रिपोर्ट है कि इस तरह दिखता है प्राप्त कर सकते हैं:

RSpec Result http://myskitch.com/robbyrussell/rspec_results-20070801-233809.jpg

था आप था किसी भी नाकाम रहने के परीक्षण, विशेष परीक्षा लाल होगा और यह विशिष्ट लाइनों का विस्तार होगा जहां परीक्षण आप प्रदान करने में विफल परीक्षण में असफल रहा और इस मुद्दे को हल करने के लिए आपको कहां देखना चाहिए, इस पर अधिक दृश्यता।

+2

परीक्षण व्यतीत कर रहा है, नहीं नाकाम रहने, तो यह जवाब प्रासंगिक नहीं है। प्रयास के लिए –

3

ब्लॉग पोस्ट में परिभाषा कंध विशिष्ट है (सेटअप (ब्लॉक) विधि मॉड्यूल में परिभाषित किया गया है Thoughtbot :: context.rb में कंधे। Musta.rb तब टेस्टकेस उस मॉड्यूल का विस्तार करता है)।

शुद्ध परीक्षण :: इकाई के लिए परिभाषा

# File test/unit/testcase.rb, line 100 
     def setup 
     end 

है कि आप क्या कर सकता है है

def setup 
    log_test 
end 

private 

def log_test 
    if Rails::logger 
    # When I run tests in rake or autotest I see the same log message multiple times per test for some reason. 
    # This guard prevents that. 
    unless @already_logged_this_test 
    Rails::logger.info "\n\nStarting #{@method_name}\n#{'-' * (9 + @method_name.length)}\n" 
    end 
    @already_logged_this_test = true 
end 

संपादित

तुम सच में संपादित करने के लिए नहीं चाहते हैं तो आपके फाइलें जिन्हें आप फिर से खोलने का परीक्षण कर सकते हैं और इसके बजाय रन का विस्तार कर सकते हैं:

class Test::Unit::TestCase 
    alias :old_run :run 
    def run 
    log_test 
    old_run 
    end 
end 

इस काम करना चाहिए (मैं चारों ओर गहरे लाल रंग का नहीं है, हालांकि परीक्षण करने के लिए)


मैं छोड़ देना! (निराशा में)

मैंने कोड की जांच की और रेल वास्तव में दृश्य के पीछे जादू करता है, शायद यही कारण है कि रनफिनिंग रन काम नहीं करता है।

बात यह है कि: जादू का हिस्सा ActiveSupport :: CallBack और सेटअप और टियरडाउन के लिए कॉलबैक बनाना शामिल है।

जिसका अर्थ है

class Test::Unit::TestCase 
    setup :log_test 

    private 

    def log_test 
    if Rails::logger 
     # When I run tests in rake or autotest I see the same log message multiple times per test for some reason. 
     # This guard prevents that. 
     unless @already_logged_this_test 
     Rails::logger.info "\n\nStarting #{@method_name}\n#{'-' * (9 + @method_name.length)}\n" 
     end 
     @already_logged_this_test = true 
    end 
    end 
end 

निश्चित रूप से

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

+0

एक सिक्का। – nurettin

6

टेस्ट नाम की छपाई टेस्टरुनर की ज़िम्मेदारी है। यदि आप कमांड लाइन से अपने परीक्षण चला रहे हैं तो आप टेस्ट केस नाम प्रिंट करने के लिए -v विकल्प निर्दिष्ट कर सकते हैं।

उदाहरण:

ruby test_Foo.rb -v 
Loaded suite test_Foo 
Started 
test_blah(TestFoo): . 
test_blee(TestFoo): . 

Finished in 0.007 seconds. 

2 tests, 15 assertions, 0 failures, 0 errors 
+0

रेल के 'रेक परीक्षण' कार्य से ऐसा करने का कोई समकक्ष तरीका है? – nertzy

+0

रेक परीक्षण: इकाइयां टेस्टॉप = = - वी " – allenwei

4

यह test_helper.rb

class Test::Unit::TestCase 
    # ... 

    def setup_with_naming 
    unless @@named[self.class.name] 
     puts "\n#{self.class.name} " 
     @@named[self.class.name] = true 
    end 
    setup_without_naming 
    end 
    alias_method_chain :setup, :naming unless defined? @@aliased 
    @@aliased = true 
end 

@@ एलियास चर फिर से aliased जब आप में एकाधिक फ़ाइलों पर चला जा रहा से रहता है, मैं क्या उपयोग है एक बार; @@ नाम प्रत्येक टेस्ट से पहले प्रदर्शित होने से नाम रखता है (बस पहले चलाने से पहले)।

0

सहायता के लिए सभी को धन्यवाद, मैं परीक्षणों के माध्यम से जा रहा हूं और इन अंतिम जोड़े उत्तरों के आने से पहले प्रत्येक परीक्षण फ़ाइल के लिए प्रत्येक सेटअप विधि में log_name में कॉल जोड़ रहा हूं। एक बार फिर धन्यवाद।

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