आप अपनी अगली छोटी फीचर चेक-इन करने वाले हैं, इसलिए आप एक पूर्ण इंटीग्रेशन टेस्ट रन शुरू करते हैं। आप प्रतीक्षा करते हैं, और प्रतीक्षा करते हैं, जब तक कि डॉट्स आपकी स्क्रीन को भर नहीं देते...
......FF....
:-(
आपके टेस्ट खत्म होने में अभी भी कुछ मिनट बाकी हैं। लेकिन अगर आप टेस्ट रन को जल्दी छोड़ देते हैं, तो आपको कोई अंदाजा नहीं होगा कि कौन से टेस्ट विफल हुए।
क्या आपको वास्तव में उन विफलताओं को देखने से पहले पूरे रन के खत्म होने का इंतजार करना होगा?
Ctrl-T बचाव के लिए!
यदि आप मैक का उपयोग कर रहे हैं, तो आपके टेस्ट विफलताओं को जल्दी देखने का एक तरीका है:
अपने टेस्ट चल रहे हों तो Ctrl-T दबाएं।
जब आप ऐसा करते हैं, तो आप देखेंगे कि कौन सा टेस्ट केस वर्तमान में चल रहा है, और यह कितने समय से चल रहा है। यदि अब तक कोई टेस्ट विफल हुआ है, तो आप भी उन विफलताओं को देखेंगे, इसलिए आप अपने अगले रन से पहले उन्हें ठीक करने में एक शुरुआत कर सकते हैं!
यह उन टेस्ट्स को डीबग करने के लिए भी वास्तव में आसान है जो बस लटक जाते हैं। Ctrl-T आपको बताएगा कि कौन सा टेस्ट चलाने की कोशिश कर रहा है, ताकि आप केवल उस एक टेस्ट को अलग कर सकें और इसे ठीक कर सकें।
अंत में, मैंने किसी भी समय Ctrl-T दबाने की आदत बना ली है जब एक टेस्ट को खत्म होने में उल्लेखनीय रूप से लंबा समय लगता है (मान लीजिए, एक सेकंड या उससे अधिक)। इसने मुझे बहुत सारे धीमे टेस्ट की ओर इशारा किया है जिन्हें मुझे तेज करने की आवश्यकता है।
Ctrl-T कैसे काम करता है?
मैक पर, Ctrl-T एक संदेश, या सिग्नल, जिसे INFO कहा जाता है, को चल रहे प्रोग्राम को भेजता है:
puts "Starting..." trap("INFO") { puts "INFO triggered!" } loop { print "."; sleep 0.1}
~/Source jweiss$ ruby signal_test.rb Starting... ........^Tload: 7.14 cmd: ruby 6121 running 0.10u 0.08s INFO triggered! .......^Tload: 7.14 cmd: ruby 6121 running 0.10u 0.08s INFO triggered! ................^Tload: 11.77 cmd: ruby 6121 running 0.10u 0.08s .INFO triggered! ......^Csignal_test.rb:5:in `sleep': Interrupt from signal_test.rb:5:in `block in <main>' from signal_test.rb:5:in `loop' from signal_test.rb:5:in `<main>'
Minitest INFO के बारे में जानता है, और टेस्ट रन के बारे में जानकारी प्रिंट करके इसका जवाब देता है:
~/Source/rails/activesupport[master] jweiss$ be rake /usr/local/Cellar/ruby/2.2.0/bin/ruby -w -I"lib:test" "/usr/local/Cellar/ruby/2.2.0/lib/ruby/2.2.0/rake/rake_test_loader.rb" "test/**/*_test.rb" Run options: --seed 33445 # Running: .................F........^Tload: 1.62 cmd: ruby 29646 running 4.37u 1.40s Current results: 1) Failure: CleanLoggerTest#test_format_message [/Users/jweiss/Source/rails/activesupport/test/clean_logger_test.rb:13]: Expected "error\n" to not be equal to "error\n". Current: DigestUUIDExt#test_invalid_hash_class 0.02s ............................
बहुत अच्छा!
यह जानकर कि यह संभव है, आप सोच सकते हैं कि अन्य ऐप्स INFO को कैसे संभाल सकते हैं:
- रेल्स वर्तमान में चल रहे कंट्रोलर एक्शन या कुछ प्रदर्शन आँकड़े प्रदर्शित कर सकता है।
- साइडकिक आपको बता सकता है कि प्रत्येक वर्कर क्या कर रहा है, ताकि आप देख सकें कि वे कहां अटक जाते हैं।
और साइडकिक वास्तव में INFO का उपयोग प्रत्येक थ्रेड के बैकट्रेस को प्रिंट करने के लिए करता था जिसे वह चलाता था। लेकिन क्योंकि INFO लिनक्स पर समर्थित नहीं है, साइडकिक एक अलग सिग्नल पर स्विच हो गया। दुर्भाग्य से, उस सिग्नल को INFO की तरह कीबोर्ड शॉर्टकट द्वारा ट्रिगर नहीं किया जा सकता।
क्योंकि INFO लिनक्स पर उपलब्ध नहीं है (और कुछ कह सकते हैं कि इस तरह INFO का उपयोग करना पूरी तरह से सही नहीं है, वैसे भी), यह व्यवहार उतना व्यापक नहीं है जितना हो सकता था।
फिर भी, यह थोड़ी सी अतिरिक्त मदद है जो कई स्थितियों में उपयोगी हो सकती है। यदि आप एक ऐप बना रहे हैं, तो इस बारे में सोचने लायक है कि आप ऑन-डिमांड कौन से स्टेटस संदेश प्रदर्शित कर सकते हैं जो रुचि रखने वाले लोगों के लिए हैं।