2008-09-15 16 views
43

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

उत्तर

22

आप अलग-अलग टर्मिनल विंडो में script/spec_server चलाकर अपने script/spec कॉल को तेज़ करने में सक्षम होना चाहिए, फिर अपने स्पेक कॉल में अतिरिक्त -X पैरामीटर जोड़ना चाहिए।

+0

स्पष्ट होने के लिए, आप ऐसा कुछ करेंगे: spec --color ./spec -X –

+21

spec_server अब स्पार्क के पक्ष में बहिष्कृत है। (http://github.com/timcharper/spork) – austinfromboston

+2

https://github.com/sporkrb/spork - स्पार्क – ted

3

क्या आप इसे रेल पर चला रहे हैं? यदि ऐसा है, तो यह आरएसपीईसी की शुरुआत नहीं है जो धीमा है, यह रेल है। चश्मा चलाने से पहले रेल को पूरे कोडबेस और आपके को प्रारंभ करना होगा। खैर, यह पर है, लेकिन यह करता है। आरएसपीसी मेरे छोटे गैर-रेल परियोजनाओं के तहत मेरे लिए बहुत तेज दौड़ता है।

+0

धन्यवाद। मैंने सवाल को रेल-विशिष्ट होने के लिए स्पष्ट किया है। –

+0

फिर हाँ, इसकी रेल, आरएसपीईसी नहीं है जो आपको निश्चित रूप से धीमा कर रही है। –

3

रनिंग परीक्षण वास्तव में धीमा हो सकता है क्योंकि पूरे रेल वातावरण को लोड करना है (स्क्रिप्ट/कंसोल का प्रयास करें) और केवल तभी सभी परीक्षण चल सकते हैं। आपको autotest का उपयोग करना चाहिए जो पर्यावरण को लोड रखता है और यह जांच करेगा कि आप कौन सी फाइलें संपादित करते हैं। जब आप फ़ाइल को संपादित और सहेजते हैं, तो केवल उन परीक्षणों पर निर्भर करता है जो स्वचालित रूप से और जल्दी से चलेंगे।

2

यदि आप मैक का उपयोग कर रहे हैं तो मैं ऑटोटेस्ट पर रुपेक्टर का उपयोग करने की सलाह देता हूं क्योंकि यह मतदान के लिए बहुत कम संसाधनों का उपयोग करता है, जो स्वत: से अधिक फ़ाइलों को बदलता है। दोनों एक पूर्ण कोको संस्करण

RSpactor.app

या मणि संस्करण है कि मैं Github

sudo gem install pelle-rspactor 

पर बनाए रखने जबकि इन अलग-अलग rspec परीक्षण में तेजी लाने नहीं है नहीं है, वे बहुत तेजी से लगता है कि उन्हें ऑटो के रूप में आप को बचाने के एक दूसरे के भीतर प्रभावित कल्पना चलाओ।

+0

अच्छा विचार है, लेकिन लिंक को अपडेट की आवश्यकता है और यह नवीनतम आरएसपीईसी के साथ काम नहीं कर रहा है। –

+0

अब मैं mislavs संस्करण का उपयोग करने की सलाह देते हैं। सूडो मणि mislav-rspactor – Pelle

1

यदि आप विंडोज वातावरण पर हैं तो शायद आप ऐसा कर सकते हैं क्योंकि रेल विंडोज के तहत वास्तव में धीरे-धीरे स्टार्टअप लग रहा है। मेरे पास विंडोज़ पर एक ही अनुभव था और इसे वास्तव में ज़िप्पी बनाने के लिए मेरे सेटअप को लिनक्स वीएम में ले जाना पड़ा (मैं ऑटोटेस्ट का भी उपयोग कर रहा था)।

+0

+1 स्थापित करें। मैं लिनक्स पर रेल और आरएसपीसी चलाता हूं और एक काफी शक्तिशाली मशीन पर यद्यपि कोई धीमी शिकायत नहीं है। मेरा सहयोगी समान हार्डवेयर पर विंडोज का उपयोग करता है, और रेल वातावरण को लोड करने में पूर्ण मिनट लग सकता है। –

4

आरएसपीईसी इतनी धीमी क्यों है? क्योंकि यह सभी वातावरण लोड करता है, फिक्स्चर लोड करता है और वह जैज़।

वहाँ रेल 'प्रारंभिक लोड तेजी लाने के लिए आप के बजाय डेटाबेस पर भरोसा करने की mocks का उपयोग कर की कोशिश कर सकते एक रास्ता है, यह वास्तव में इकाई परीक्षण के लिए सही है और निश्चित रूप से अपने इकाई परीक्षण तेज़ हो जाएगी। के रूप में @Marc-Andre Lafortune

द्वारा, @Scott Matthewman द्वारा mentionned mentionned zentest से Autotest के साथ एक ही मदद कर सकते हैं Additionnaly कल्पना सर्वर का उपयोग कर वहाँ एक रास्ता मेरे रेल एप्लिकेशन का भाग मैं की जरूरत है (उदाहरण के लिए ActiveRecord सामान केवल) तो खास तौर है यह कुछ परीक्षण चलाने के लिए बिल्कुल सब कुछ लोड नहीं करता है? क्या इस

के बारे में
rake test:recent 

मुझे यकीन है कि कैसे rspec कार्य इस के साथ एकीकृत नहीं कर रहा हूँ, लेकिन आप निश्चित रूप से परीक्षण इस्तेमाल कर सकते हैं: अगर rspec परीक्षण के साथ भी ऐसा ही करने के लिए एक टेम्पलेट के रूप में हाल ही में कार्य।

rake test:rspec:recent 

अभी तक

+0

रूबी के लिए एक नया ऑटोटेस्ट टूल है: इन्फिनिटी टेस्ट @ http://github.com/tomas-stefano/infinity_test – Jean

+0

@ स्कॉट आप क्या सेकेंडिंग कर रहे हैं और क्यों? – rogerdpack

4

मौजूद नहीं है क्योंकि यह सभी environement लोड करता है, जुड़नार और सभी कि जाज लोड करता है।

असली अपराधी यह है कि यदि आप इसे rake spec, it runs the db:test:prepare task का उपयोग करके चलाते हैं।

यह कार्य आपके पूरे परीक्षण डेटाबेस को छोड़ देता है और इसे स्क्रैच से फिर से बनाता है। यह मेरे लिए हास्यास्पद लगता है, लेकिन यह वही करता है (वही होता है जब आप rake:test:units आदि चलाते हैं)।

आप आसानी से spec एप्लिकेशन का उपयोग कर इस पर काम कर सकते हैं जो rspec rspec मणि के हिस्से के रूप में स्थापित करता है।

इस तरह

:

cd railsapp 
spec speC# run all specs without rebuilding the whole damn database 
spec spec/models # run model specs only 

cd spec 
spec controllers/user* # run specs for controllers that start with user 
+4

डीबी को छोड़कर और इसे पुन: प्रयास करने से यह सुनिश्चित होता है कि फिक्स्चर से डेटा सही ढंग से लोड किया गया है और पिछले रनों से कोई संशोधन नहीं छोड़ा गया है। चलने वाला नमूना सीधे इसकी गारंटी नहीं देता है। यदि आप डीबी पर निर्भर होने जा रहे हैं तो आपको इसे स्क्रैच से फिर से बनाना होगा, मॉक ऑब्जेक्ट्स ftw! – Jean

4

मुझे लगता है कि "ज़ेन" अनुभव आप देख रहे हैं पृष्ठभूमि में spec_server और autospec को चलाने के लिए, परिणाम जा रहा है लगभग तुरंत परीक्षण जब आप एक फ़ाइल को सहेजने के साथ है।

हालांकि, मुझे इन दो कार्यक्रमों को संवाद करने में समस्याएं आ रही हैं। मैंने देखा है कि Autotest spec_server को आदेश नहीं भेजा जाता है

:

मैं एक स्पष्टीकरण here पाया। इसके बजाय यह पूरे रेल वातावरण और आपके एप्लिकेशन के प्लगइन्स को हर बार निष्पादित करता है। यह को स्क्रिप्ट सर्वर से काफी धीमी गति से चलाने का कारण बनता है, क्योंकि जब आप स्क्रिप्ट/spec कमांड चलाते हैं तो चश्मे spec_server पर भेजे जाते हैं जो में पहले से ही आपके रेल वातावरण को निकाल दिया गया है और जाने के लिए तैयार है। यदि आप एक नई प्लगइन या ऐसा कुछ स्थापित करने के लिए होते हैं, तो आप को spec_server को पुनरारंभ करना होगा।

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

2

rspec-rails-1.2.7 के रूप में, spec_server को स्पार्क मणि के पक्ष में बहिष्कृत किया जाता है।

2

मुख्य कारण यह है कि कुछ कारणों से विंडोज़ पर हमेशा लेता है।

स्पीडअप के लिए टिप्स: स्पार्क अब विंडोज़ के साथ काम करता है, मुझे विश्वास है।

आप कोशिश कर सकते हैं "faster_require" जो स्थानों कैश:

http://github.com/rdp/faster_require

जीएल। -आरपी

32

मैं निश्चित रूप से स्पार्क की जांच करने का सुझाव देता हूं।

http://spork.rubyforge.org/

railstutorial विशेष रूप से इस पते, और spork रेल 3.0 में अच्छी तरह से चलाने के लिए एक समाधान देता है (इस पल के रूप में, Spork रेल 3 बॉक्स से बाहर तैयार नहीं है)। बेशक, यदि आप रेल 3.0 पर नहीं हैं, तो आपको जाने के लिए अच्छा होना चाहिए।

ट्यूटोरियल का हिस्सा कैसे रेल 3,0

http://railstutorial.org/chapters/static-pages#sec:spork

जाँच हो रही है जब spork है में spork चलाने के लिए दिखा रेल इस उत्तर के लिए 3.0 तैयार

http://www.railsplugins.org/plugins/440-spork

+1

स्पार्क ने मेरे लिए बहुत अच्छा काम किया है, इसने फिर से मजा परीक्षण किया है। –

+0

स्पार्क के बारे में उल्लेख करने के लिए केवल एक विवरण है: यह विंडोज़ पर नहीं चलता है। – lampak

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