2013-01-23 17 views
7

मैं Guard gemगार्ड, अस्थायी रूप से विशिष्ट फ़ाइल को कैसे ट्रैक करें?

विकास के कुछ समय में मुझे केवल एक विशिष्ट फ़ाइल या कई फाइलों को ट्रैक करने की आवश्यकता है लेकिन पूरी परियोजना नहीं है।

क्या किसी विशेष फ़ाइल को अस्थायी रूप से ट्रैक करने का कोई आसान तरीका है?

मुझे पता है कि यह गार्ड फ़ाइल को संशोधित करके किया जा सकता है लेकिन मुझे नहीं लगता कि यह एक साफ समाधान है।

+0

कृपया इस समाधान की तलाश में क्यों विस्तार करें। साथ ही, क्या यह हमेशा एक फ़ाइल को ट्रैक करेगा, या आप कल्पना कर सकते हैं कि एकाधिक फाइलों पर ट्रैकिंग टॉगल करना चाहते हैं? – crftr

+0

यदि मेरे पास बहुत सारे टूटे हुए परीक्षण हैं तो गार्ड मुझे संदेश की गड़बड़ी लाएगा। यही कारण है कि मैं उन फ़ाइलों से केवल संदेश प्राप्त करना चाहता हूं जिन पर मैं काम कर रहा हूं। – megas

उत्तर

10

वास्तव में आप सिर्फ focus: trueit बयान में उदाहरण के लिए उपयोग कर सकते हैं:

अपने युक्ति फ़ाइल में।

it "needs to focus on this!", focus: => true do 
    #test written here. 
end 

फिर spec/spec_helper में आपको कॉन्फ़िगरेशन विकल्प जोड़ने की आवश्यकता है।

RSpec.configure do |config| 
    config.treat_symbols_as_metadata_keys_with_true_values = true 
    config.filter_run :focus => true 
    config.run_all_when_everything_filtered = true 
end 

तब गार्ड स्वचालित रूप से उस परीक्षण को उठाएगा जो केंद्रित है और इसे केवल चलाएं। config.run_all_when_everything_filtered = true नामों को भ्रामक लगता है, भले ही फ़िल्टर किए गए कुछ भी नहीं होने पर सभी परीक्षणों को चलाने के लिए गार्ड को बताता है।

मुझे लगता है कि रयान बेट की रेल Guard और Spork पर बहुत उपयोगी साबित होती है।

+0

यह आसान था, धन्यवाद – megas

+0

इसके लिए बहुत धन्यवाद, कि अंतिम कॉन्फ़िगर चर वैरिएबल भ्रामक है। सुझाए गए संपादन: क्योंकि 'config.treat_symbols_as_metadata_keys_with_true_values' चालू है, इसलिए spec line' it 'को इस पर ध्यान केंद्रित करने की आवश्यकता है! ", फोकस: => सच करें' को इसे छोटा करने के लिए इसे छोटा करने के लिए छोटा किया जा सकता है!" ,: फोकस करें ' – yoz

+0

rspec 3' config.filter_run_when_matching के लिए: फोकस' पर्याप्त है, और "जब कुछ भी 'फोकस' के साथ टैग नहीं किया जाता है, तो सभी उदाहरण चलते हैं।" –

0

आप अपने चयन के पर्यावरण चर को जांचने के लिए गार्ड फ़ाइल को स्थायी रूप से संशोधित कर सकते हैं और मौजूद होने पर अलग तरीके से व्यवहार कर सकते हैं। उदाहरण के लिए, परिवर्तनीय ENV ['FILE'] तक पहुंचें। फिर जब भी आप चाहें FILE=foo.rb के साथ गार्ड चलाने के लिए अपना आदेश प्रीपेड कर सकते हैं।

3

शायद groups आपके लिए काम करेगा?

# In your Guardfile 
group :focus do 
    guard :ruby do 
    watch('file_to_focus_on.rb') 
    end 
end 

# Run it with 
guard -g focus 

मैं आप का उल्लेख आप Guardfile संशोधित करने के लिए नहीं करना चाहती है, लेकिन किसी समूह को जोड़ना सिर्फ एक बार हर बार जब आप एक केंद्रित सेट और वापस करने के लिए परियोजना को देखने से स्विच किया जाना है, नहीं की आवश्यकता होगी।

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

वैकल्पिक रूप से, यदि आप वास्तव में नहीं फ़ाइलों को भी सूचीबद्ध Guardfile में पर ध्यान केंद्रित करना चाहते हैं, तो आप कर सकते थे: द्वारा सुझाए गए के रूप में समूह एक अलग फाइल या एक वातावरण चर से फ़ाइलों की एक सूची में पढ़ा ध्यान केंद्रित डेविड above। गार्डफाइल सिर्फ सादा रूबी है (गार्ड डीएसएल तक पहुंच के साथ), इसलिए फ़ाइल या एनएनवी चर को पढ़ना आसान है।

+0

मुझे यह पसंद है, लेकिन यह त्रुटि उत्पन्न करता है - 'गार्ड/रूबी' लोड नहीं कर सका या कक्षा गार्ड :: रूबी नहीं ढूंढ सका। मैं इसे हल नहीं कर सका, कोई विचार? – megas

+0

मैंने गार्ड बदल दिया: रूबी 'आरएसपीईसी' की रक्षा करने के लिए, शुरुआत में गार्ड सही फ़ाइल चलाता है लेकिन फिर यह सभी परीक्षण चलाता है, इसलिए कुछ भी नहीं बदला। – megas

+1

रूबी गार्ड प्लगइन पाया जा सकता है [यहां] (https://github.com/JustinLove/guard-ruby)। गार्ड-आरएसपीसी प्लगइन के साथ कुछ फाइलों पर ध्यान केंद्रित करने के कई तरीके हैं। @ ओटो-ब्रगलज़ ने एक अलग उत्तर में एक तरीका वर्णित किया है जो rspec कमांडलाइन विकल्पों का उपयोग करता है। गार्ड-आरएसपीसी रीडेमे में एक सबसेट चलाने पर एक [सेक्शन] (https://github.com/guard/guard-rspec#running-a-subset-of-all-specs) है। मुझे बताएं कि क्या ये पॉइंटर्स आपके लिए काम नहीं करते हैं और मैं अधिक जानकारी के साथ उत्तर अपडेट कर सकता हूं। – exbinary

1

यदि आप guard-rspec का उपयोग करते हैं। तुम यह केर सकते हो।

अपने Guardfile rspec ब्लॉक बदलें ताकि है कुछ इस तरह है:

guard 'rspec', :cli => ENV['RSPEC_e'].nil? ? "": "-e #{ENV['RSPEC_e']}") do 
    # ... regular rspec-rails stuff goes here ... 
end 

प्रारंभ गार्ड। और पहले RSPEC_e सेट करें। जैसा तो ...

RSPEC_e=here guard 

तो जब भी आप कुछ ही चश्मा है कि पाठ "यहाँ" बदलने उनके विवरण में (RSPEC_e द्वारा निर्धारित) फिर से रन कर दिया जाएगा।

+2

[--tag विकल्प] भी है (https://www.relishapp.com/rspec/rspec-core/docs/command-line/tag-option!) जो उपर्युक्त से सरल हो सकता है। 'गार्ड' rspec ',: cli =>' -tt focus 'करें ...' और यह केवल फोकस => सत्य के साथ टैग किए गए उदाहरण चलाएगा, उदा। 'यह "मुझे परेशानी दे रहा है",: फोकस => सच करें ... ' – exbinary

+0

हाँ टैग अच्छी तरह से काम करेंगे, लेकिन फिर आपको अपनी चश्मा टैग करना होगा। यदि आप उपयोग करते हैं- आप केवल पाठ से मेल खा सकते हैं ... –