2010-07-06 10 views
12

मैं ककड़ी, रेल 3, rspec2 और autotest का उपयोग कर रहा हूँ। मैं यह पता लगाने की कोशिश कर रहा हूं कि मेरी विशेषताएं असीमित रूप से लूपिंग क्यों कर रही हैं। मुझे संदेह है कि परीक्षण के दौरान कुछ फाइल बदल दी जा रही है लेकिन मुझे यकीन नहीं है कि कौन सा है। मैंने अपने .autotest में कोई पासा के साथ कुछ अपवाद जोड़े हैं।मैं ऑटोटेस्ट अनंत लूप समस्याओं का निवारण कैसे करूं?

क्या इस समस्या का निवारण करने के लिए मैं कोई कदम उठा सकता हूं?

यह अच्छा होगा अगर मैं देख सकूं कि कौन सी फाइलें रीरन ट्रिगर कर रही हैं या रन टाइम पर, कौन सी फाइलें देखी जा रही हैं या नहीं देखी जा रही हैं।

यहाँ मेरी .autotest सामग्री

require 'autotest/growl' 

Autotest::Growl::clear_terminal = false 

# Skip some paths 
Autotest.add_hook :initialize do |autotest| 
    %w{.git .DS_store db log tmp rerun.txt}.each { |e| autotest.add_exception(e) } 
end 

उत्तर

15

ठीक है, तो मैंने इसे समझ लिया। मैं क्या चल रहा था की बेहतर समझ प्राप्त करने के लिए ऑटोटेस्ट के स्रोत में कबूतर हूं। यह सभी अपवादों में से Regexp.union बनाता है और उन फ़ाइलों को अनदेखा करता है जो संबंधित पथ अनुपालन अभिव्यक्ति से मेल खाते हैं।

बेहतर बग मैं छोड़कर ./app, ./lib, ./public, ./script, ./spec और ./features.autotest को अपने प्रोजेक्ट की निर्देशिका में सब कुछ जोड़ा समझने के लिए। कुछ ऐसा:

# .autotest - to troubleshoot 
Autotest.add_hook :initialize do |at| 
    at.add_exception(%r{^\./\.git}) 
    ... 
    at.add_exception(%r{^\./db}) 
    ... 
    at.add_exception(%r{^\./rerun.txt}) 
    ... 
end 

जब मैंने ऐसा किया तो मुझे अनंत लूप नहीं मिला। इसके बाद मैंने बस प्रत्येक अपवाद पर टिप्पणी करना शुरू कर दिया। बाहर निकलता है, केवल एकमात्र फ़ाइल जिसे मुझे मैन्युअल रूप से अनदेखा करना था Gemfile.lock था। किसी कारण से यह या तो उस बिंदु पर स्वचालित रूप से बदल रहा है या भ्रमित हो रहा है जहां यह ककड़ी पाश बनाता है। मैं उन्हें जानते हैं कि वे Autotest अपवादों में बनाया गया है कि जोड़ना चाहिए जाने के लिए ककड़ी सूची पर रिपोर्ट करने के लिए जा रहा हूँ

# .autotest - to fix 
Autotest.add_hook :initialize do |at| 
    # Gemfile.lock is causing cucumber to run infinitely. Don't watch it. 
    at.add_exception(%r{^\./Gemfile.lock}) 
end 

:

इस प्रकार, इस .autotest समस्या हल हो।

+0

इसे साझा करने के लिए धन्यवाद। – zetetic

+3

मैंने सिर्फ Gemfile.lock को छोड़कर कोशिश की लेकिन उसने चाल नहीं की। मैं निम्नलिखित का उपयोग कर समाप्त हुआ: Autotest.add_hook: प्रारंभ करें | at | % w {.svn .hg .git विक्रेता rerun.txti डीबी लॉग tmp .DS_store Gemfile.lock}। प्रत्येक {| अपवाद | at.add_exception (अपवाद)} अंत – localshred

+0

'Gemfile.lock' को अनदेखा करने के लिए स्वचालित रूप से कहने के लिए मेरे लिए काम किया। ऐसा लगता है कि मेरी चश्मा चलाने के दौरान, 'Gemfile.lock' को बदला जा रहा था (मेरी' मणि 'capistrano' लाइन की निर्भरता परीक्षण के दौरान बदल दी जा रही थी, और फिर बाद में वापस ... अजीब)। –

0

आप ruby-debug का उपयोग कर सकते है। फिर आप अपने कोड में डीबगर स्टेटमेंट जोड़ सकते हैं और उन्हें तोड़ सकते हैं।

+0

ठीक है, मैं इसे संभाल सकता हूं, लेकिन एक बार जब मैं तोड़ता हूं तो मैं ऑटोटेस्ट का निरीक्षण कैसे कर सकता हूं? मुझे यकीन नहीं है कि इसके आंतरिक में चोटी के लिए कहां देखना है और देखें कि यह क्यों कर रहा है। गिट का उपयोग कर –

1

अपनी फ़ाइलों को संस्करण नियंत्रण में रखें। क्या बदल गया है यह देखने के लिए स्वचालित रूप से चलाएं और फिर अपने वीसी सिस्टम की स्थिति कमांड (उदा। git status) चलाएं।

पीएस: यह शायद rerun.txt है, जो कि जब भी आप सुविधाओं को चलाते हैं तो ककड़ी द्वारा छुआ जाता है।

+0

। स्थिति रिपोर्ट करता है कि कुछ भी नहीं बदला है (मैं शायद उस फ़ाइल को अनदेखा कर रहा हूं जो बदल जाता है, _if_ एक है)। मैंने अपने autotest अपवादों में rerun.txt भी जोड़ा है। मेरी .autotest सामग्री शामिल करने के लिए अद्यतन उत्तर। –

+0

हालांकि दिलचस्प विचार, मैं एक नया चेकआउट आज़माउंगा और यह देखने के लिए जल्द ही सब कुछ ट्रैक करूँगा कि इससे मदद मिलती है या नहीं। –

+0

2 फ़ाइलों को संशोधित किया जा रहा है (गिट के अनुसार) db/test.sqlite3 और log/test.log हैं। ऐसा लगता है .autotest उन्हें देखने के लिए autotest कहने चाहिए। मुझे यकीन है कि ककड़ी-रेलों ने भी इसमें बनाया है। क्या मेरा। सतर्क दिखता है? –

7

बस धन्यवाद कहना चाहता था। बाहर निकलता है, मेरे लिए, यह लॉग निर्देशिका थी। मेरी .autotest फ़ाइल इस तरह दिखती है।

# .autotest 
Autotest.add_hook :initialize do |at| 
    # Log directory is causing cucumber to run infinitely. 
    at.add_exception(%r{^\./log}) 
end

संदर्भ के लिए, "अनुकूलित Autotest व्यवहार" http://github.com/aslakhellesoy/cucumber/wiki/Autotest-Integration में है, जो अनंत लूप समस्या के बारे में बात करती है देखते हैं।

6

लिनक्स/यूनिक्स में आप आदेश का उपयोग कर सकते हैं:

$ find . -mmin -5 

यह पता लगाने की जो फ़ाइलों पिछले 5 मिनट में संशोधित किया गया (या जो भी चूक उपयुक्त है)। यह अनंत लूप को ट्रिगर करने वाली फ़ाइल को ढूंढने में बहुत मदद कर सकता है। फिर अन्य उत्तरों में समझाए गए अपवाद को जोड़ें।

मेरे मामले में, अपराधी webrat.log था।

5

यह ध्यान देने योग्य है कि आप ऑटोस्पेक/ऑटोटेस्ट को पास कर सकते हैं और यह प्रिंट करेगा कि इसे चलाने के लिए क्या ट्रिगर हुआ।

+0

महान संकेत, धन्यवाद! –

+0

आह, महत्वपूर्ण जानकारी! – Felixyz