2012-02-21 12 views
6

रेल 3.2.1 ऐप, न्यूनतम और ऑटोटेस्ट-रेल रत्नों का उपयोग करके।टेस्ट/यूनिट, मिनीटेस्ट का उपयोग करके मैं ऑटोटैस्ट में रंगीन आउटपुट कैसे प्राप्त कर सकता हूं?

यदि मैं "रेक परीक्षण" चलाता हूं तो आउटपुट रंग में होता है। लेकिन अगर मैं ऑटोटेस्ट चलाता हूं, तो आउटपुट रंग में नहीं होता है।

ऑटोटेस्ट का उपयोग करते समय मुझे रंग आउटपुट कैसे मिल सकता है?

ENV["RAILS_ENV"] = "test" 
require File.expand_path('../../config/environment', __FILE__) 
require 'rails/test_help' 
require 'turn/autorun' 

Turn.config do |c| 
# use one of output formats: 
# :outline - turn's original case/test outline mode [default] 
# :progress - indicates progress with progress bar 
# :dotted - test/unit's traditional dot-progress mode 
# :pretty - new pretty reporter 
# :marshal - dump output as YAML (normal run mode only) 
# :cue  - interactive testing 
c.format = :pretty 
# turn on invoke/execute tracing, enable full backtrace 
c.trace = true 
# use humanized test names (works only with :outline format) 
c.natural = true 
end 

class ActiveSupport::TestCase 
    # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order. 
    # 
    # Note: You'll currently still have to declare fixtures explicitly in integration tests 
    # -- they do not yet inherit this setting 
    fixtures :all 

    # Add more helper methods to be used by all tests here... 
end 

उत्तर

7

मैं "रेक परीक्षण" उत्पादन रंग में है चलाते हैं:

यहाँ मेरी test_helper.rb है।

इसका कारण यह है Autotest "टर्मिनल" है कि अपने परीक्षण processess में चल रहा है एक tty नहीं है किया जा रहा है, और जब आप सीधे चलाने के लिए, यह है।

सबसे पहले यह कैसे काम करता है, रंग कोड को एस्केप अनुक्रमों में परिभाषित किया जाता है, जो कि यदि आप उन्हें लिखते हैं तो \E[48mPRINT ME IN RED\E[0m (details) जैसा कुछ दिखाई देगा।

आपका टर्मिनल इन भागने के दृश्यों (सामान्यतः) को समझता है, उन्हें रंगों के साथ बदलता है, आउटपुट की उपस्थिति में सुधार करता है।

पर्यावरण चर टर्मिनल एमुलेटर द्वारा परिभाषित का उपयोग कर, और देख इसे यह इनपुट है, और आउटपुट धाराओं (जो $stdin, $stdout है, और $stderr) processe (रों) रंग समर्थन निर्धारित कर सकते हैं, और क्या यह एक टर्मिनल से जुड़ा है के द्वारा (tty) या एक फ़ाइल, या अन्य प्रक्रिया, या आदि

जब एक प्रक्रिया दूसरी प्रक्रिया शुरू करती है, तो आपकी प्रक्रिया, टर्मिनल मालिक नहीं है, इसलिए आपका test आउटपुट उस टर्मिनल से बात नहीं कर रहा है जो रंगीन भागने को समझता है अनुक्रम, यह autotest से बात कर रहा है, जो नहीं करता है।

वही व्यवहार होगा, आपके परीक्षण चलाएंगे, लेकिन आउटपुट को फ़ाइल में रीडायरेक्ट करेंगे, बचने के कोड और अनुक्रम अर्थहीन होंगे। एक ही रास्ता documented here इसे अपने आप को परीक्षण किया बिना, सबसे मजबूत प्रतीत होता

# rake test 
Terminal Application 
\- Bash 
    \- rake   # Rake's $stdout.tty? => true 
        # (Bash is a terminal emulator) 

# autotest 
Terminal Application 
\- Bash 
    \- autotest 
     \- rake  # Rake's $stdout.tty? => false 
         # (Autotest is not a terminal emulator) 

नकली समर्थन के लिए कुछ तरीके होती है, इसलिए कि Autotest रंग में चलता है,:

संबंध इस तरह दिखता है।

अन्य तरह से, यह using this technique

विधि #tty? धाराओं पर ऊपर के लिए बस उपयोगी नहीं है "रंग समर्थन के लिए जाँच" है, लेकिन यह भी मामले है कि एक पर विचार शॉर्ट सर्किट करने के लिए है रूबी-डीबग, या कुछ अन्य "इंटरैक्टिव" कमांड चलाता है, जब नियंत्रण प्रक्रिया एक टाटी नहीं होती है, तो कोई तरीका नहीं है कि रूबी-डीबग उपयोगकर्ता को संकेत दे सकता है, अगर यह किसी अन्य एप्लिकेशन से कनेक्ट है, जो संकेतों को समझ नहीं सकता है, तो जब किसी फ़ाइल में आउटपुट स्ट्रीमिंग, या किसी अन्य प्रक्रिया के अंदर एक प्रक्रिया चलाना, स्मार्ट सॉफ़्टवेयर हमेशा जांचता है, यह देखने के लिए कि क्या इनपुट प्रक्रिया इनपुट के लिए संकेत देकर या गैर-मानक आउटपुट भेजकर भ्रमित हो सकती है।

यदि आप कुछ अतिरिक्त पढ़ना चाहते हैं, तो रूबी दस्तावेज़ीकरण से $stdin.tty? पर एक नज़र डालें, यह प्रक्रिया इनपुट और आउटपुट धाराओं के बीच अंतर को टीटीआई माना जाता है और प्रभाव जो चीजों को निष्पादित करता है, के बीच का अंतर बताता है।

+2

ये दोनों लिंक मरने लगते हैं :( – alnorth29

+2

पोस्ट 12 महीने से अधिक पुराना है! दोनों तकनीकों का उल्लेख करने के लिए, यहां दी गई दोनों तकनीकें अब काम नहीं करती हैं, लेकिन सिद्धांत अच्छा है, आपके पास होगा कोड में ढूंढने के लिए, या मणि लेखक से पूछें कि क्या रंगांकन को मजबूर करने का कोई तरीका है, जांच को छोड़कर आउटपुट एक टीटी है या नहीं। –

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

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