मैं रेल 3 पर रूबी का उपयोग कर रहा हूं और परीक्षण लिख रहा हूं लेकिन यह बहुत धीमा है। क्या यह तेज़ करने के लिए कुछ अच्छा कॉन्फ़िगरेशन या टूल्स है?मैं आरओआर पर तेजी से परीक्षण कैसे चला सकता हूं?
उत्तर
@eml कहते हैं, अगर आप RSpec उपयोग कर रहे हैं, तो आप Spork उपयोग कर सकते हैं। यह मूल रूप से पर्यावरण को सक्रिय करता है (जो धीमा हिस्सा होता है) और फिर इसे अपने चश्मे चलाने पर हर बार मजबूर करता है।
"पर्यावरण हमेशा लोड" समस्या के लिए एक सामान्य समाधान के लिए rails-sh स्थापित कर सकते हैं और अपने परीक्षण खोल के भीतर से चला सकते हैं।
साइड-नोट: रूबी 1.9.3 को इस समस्या को थोड़ा कम करना चाहिए क्योंकि आवश्यक समय को अनुकूलित किया गया है।
शायद सबसे बड़ी गति लाभ डेटाबेस हिट करने के लिए नहीं है जब तक आप की जरूरत है सावधान किया जा रहा से आता है। डेटाबेस से उन्हें लाने के बजाय मॉक ऑब्जेक्ट्स, और/या (यदि आप फ़ैक्टरी लड़की का उपयोग कर रहे हैं) फैक्टरी (: सामान) के बजाय फैक्ट्री (बिल्डिंग) का उपयोग करें जहां भी संभव हो। केवल तभी जब आप ऐसा करते हैं तो आपको स्पार्क
अद्यतन: व्यक्तिगत रूप से, मुझे यह भी लगता है कि आपको अपने परीक्षणों की गति के बारे में भी लटका नहीं देना चाहिए। तेज़ी से बेहतर है, लेकिन एक आवेदन बढ़ने के साथ, परीक्षण सूट बढ़ेगा, और फिर भी सावधान रहें कि आप अंततः धीमे हो जाएंगे। मैं autotest मणि पर अधिक से अधिक भरोसा करने के लिए आ रहा हूँ जो पृष्ठभूमि में कोड बदलता है और काम करता है (गार्ड-आरएसपीसी एक समान काम करता है)। जब तक आपका ऐप 1000 परीक्षण तक पहुंचता है तब तक आप पूरे सूट को हर बार बदलने के लिए इंतजार नहीं करना चाहेंगे, हालांकि परीक्षण तेज हो जाते हैं।
महान सलाह। मैं वास्तव में कोड की सराहना करता हूं जहां आप बता सकते हैं कि डेवलपर ने इस क्षेत्र में देखभाल की है। मेरी एकमात्र चेतावनी, मैं जरूरी नहीं कि स्पार्क के लिए जरूरी तेज परीक्षणों पर जोर दे। विशेष रूप से जब चुनिंदा चश्मा के एक छोटे से सेट को निष्पादित करते हैं, जहां रेल वातावरण को लोड करना वास्तविक प्रतिबाधा हो सकता है। –
उचित बिंदु - मुझे लगता है कि यह वास्तव में पाठ्यक्रमों के लिए घोड़े हैं - मैं उन अन्य उत्तरों में से एक प्रतिक्रिया कर रहा था जो सुझाव देते थे कि स्पार्क कुछ प्रकार की चांदी की बुलेट थी ... मुझे नहीं लगता कि यह लेखक का इरादा है, लेकिन मैं सोचा था कि यह थोड़ा भ्रामक था – chrispanda
IMHO परीक्षण का मुख्य धीमा हिस्सा जुड़नार के डिफ़ॉल्ट कॉन्फ़िगरेशन है। आपके विन्यास (test/test_helper.rb
में) है:
class ActiveSupport::TestCase
self.use_transactional_fixtures = false
self.pre_loaded_fixtures = false
self.use_instantiated_fixtures = true
तो पहले प्रत्येक परीक्षा विधि अपने परीक्षण डेटाबेस पुराने डेटा से साफ किया जाता है, सभी तालिकाओं भर जाती है, सभी रिकॉर्ड स्मृति में पढ़ा जाता है।
आप विपरीत करने के लिए सेटिंग में बदलाव हैं:
class ActiveSupport::TestCase
self.use_transactional_fixtures = true
self.pre_loaded_fixtures = true
self.use_instantiated_fixtures = false
तो डेटाबेस प्रत्येक परीक्षा फ़ाइल के लिए केवल एक बार निर्मित है, और आप केवल रिकॉर्ड क्या तुम सच में प्रत्येक परीक्षा पद्धति में आवश्यकता लोड।
यह आपके परीक्षण डेटासेट के आकार पर निर्भर करता है कि क्या आपको परीक्षण डेटाबेस निर्माण का समय स्वीकार्य है। जब मेरे पास टेस्ट डेटा का कुछ बड़ा सेट था, तो मैंने पूरे परीक्षण सूट से पहले केवल एक बार फिक्स्चर लोड किए थे, लेकिन वह परियोजना रेल 1 में थी (और) मैंने इसे बहुत अधिक संशोधित किया है, इसलिए मैं यह नहीं बता सकता कि इसे कैसे किया जाए रेल 3 में (कम से कम जब तक समस्या कुछ नई परियोजना में दर्दनाक होने लगती है;)।
एक गंभीर चर्चा है कि परीक्षण डेटाबेस को मारा जाना चाहिए या नहीं। यदि आप मानते हैं कि उन्हें (डेटाबेस सहयोग का परीक्षण भी किया जाना चाहिए), तो आप जांच सकते हैं कि इन पैरामीटर को सेट करने से आप (या इन उत्तरों को पढ़ने वाले किसी भी व्यक्ति) की सहायता कर सकते हैं।
मैं Spork
और Guard
की सिफारिश करता हूं, वे दोनों RSpec
के साथ पूरी तरह से काम कर सकते हैं।
Spork
मदद कर सकते हैं और अधिक तेजी से परीक्षण चलाने के लिए, http://railscasts.com/episodes/285-spork
Guard
मदद कर सकते हैं परीक्षण स्वचालित रूप से चलाने के लिए। http://railscasts.com/episodes/264-guard
विकसित करने का प्रयास करें ताकि आपके अधिकांश परीक्षण पूरे रेल एप्लिकेशन ढांचे को लोड किए बिना निष्पादित किए जा सकें। अपने कल्पना सहायक में, पर्यावरण या rpec लोड हो रहा है छोड़/रेल अगर केवल तेजी से परीक्षण निष्पादित किया जा रहा है, कुछ की तरह ...
# /spec/spec_helper.rb
if RSpec.configuration.inclusion_filter[:fast]
# Setup required for fast tests in particular (if any)
# ...
else
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
end
RSpec.configure do |config|
# ...
unless RSpec.configuration.inclusion_filter[:fast]
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
end
end
के रूप में "तेज" एक परीक्षण चिह्नित करने के लिए, अपने it
कॉल करने के लिए , :fast => true
विकल्प जोड़ने या आसपास के describe
कॉल पर।
केवल तेज़ परीक्षण चलाने के लिए, अपने कमांड शैल से rspec --tag fast
निष्पादित करें।
यह पता लगाना मुश्किल हो सकता है कि आपके कोड को कैसे व्यवस्थित किया जाए ताकि परीक्षण रेल से अलग हो सकें (और निश्चित रूप से, आप अभी भी कार्यात्मक और एकीकरण परीक्षण करना चाहते हैं जो अलग से नहीं चलते हैं)।
मेरे शस्त्रागार में एक चाल सीधे ActiveRecord मॉडल या अन्य ऐसी कक्षा पर कोड लिखने से बचने के लिए है, और इसे इसके बजाय एक मिश्रण मॉड्यूल पर लिखना पसंद करते हैं। आप RSpec उपयोग कर रहे हैं आप एक वस्तु है कि कि मॉड्यूल के लिए बढ़ा दी है हो के अधीन रहते हुए को परिभाषित करते हुए mixin मॉड्यूल परीक्षण कर सकते हैं ...
describe 'MyModule', :fast => true
subject{ Object.new.tap{|o| o.extend MyModule} }
it 'does something' do
# ...
end
end
- 1. मैं जेनकींस से कैस्परजेस जावास्क्रिप्ट परीक्षण कैसे चला सकता हूं?
- 2. मैं एसबीटी के साथ एंड्रॉइड परीक्षण कैसे चला सकता हूं?
- 3. मैं Django परियोजना-स्तरीय परीक्षण कैसे चला सकता हूं?
- 4. मैं अपने सभी PHPUnit परीक्षण कैसे चला सकता हूं?
- 5. मैं रेल कंसोल से प्रारंभकर्ता कैसे चला सकता हूं?
- 6. मैं कमांड लाइन से स्कैला + specs2 कैसे चला सकता हूं?
- 7. मैं कोई प्रोग्राम कैसे चला सकता हूं?
- 8. मैं कक्षा कोड पर अपना कोड कैसे चला सकता हूं?
- 9. मैं विंडोज़ में स्टार्टअप पर एक्सएएमपीपी कैसे चला सकता हूं?
- 10. मैं पोर्ट 80 पर Node.js कैसे चला सकता हूं?
- 11. मैं जावास्क्रिप्ट में रेगेक्स पर रेगेक्स कैसे चला सकता हूं?
- 12. मैं एक अलग थ्रेड पर सेवा कैसे चला सकता हूं?
- 13. मैं एंड्रॉइड डिवाइस पर लिनक्स कमांड कैसे चला सकता हूं?
- 14. मैं रूबी जेम कैसे चला सकता हूं?
- 15. मैं समय-समय पर सेवा विधि कैसे चला सकता हूं?
- 16. मैं इवेंटहालर को असीमित रूप से कैसे चला सकता हूं?
- 17. क्या मैं मेवेन-असेंबली-प्लगइन तेज़ी से चला सकता हूं?
- 18. मैवेन के साथ जेबीहेव परीक्षण कैसे चला सकता हूं?
- 19. मैं किसी वेबसाइट से पीएलएस फ़ाइल कैसे चला सकता हूं?
- 20. मैं मैटलैब कंपाइलर को तेज़ी से कैसे चला सकता हूं?
- 21. मैं कमांड लाइन से प्रोफाइलर कैसे चला सकता हूं?
- 22. मैं मेकफ़ाइल से पर्ल एक लाइनर कैसे चला सकता हूं?
- 23. मैं एंड्रॉइड लुक-बार कैसे आसानी से चला सकता हूं?
- 24. मैं बांस से कर्म (टेस्टकुलर) के साथ जैस्मीन परीक्षण कैसे चला सकता हूं?
- 25. मैं समानांतर में न्यूटिट (सेलेनियम ग्रिड) परीक्षण कैसे चला सकता हूं?
- 26. आरओआर SQLite से PostgreSQL
- 27. मैं अपने जावा एप्लिकेशन के अंदर से जुनीट परीक्षण कैसे चला सकता हूं?
- 28. मैं django यूनिट परीक्षण (manage.py के माध्यम से) कैसे चला सकता हूं तेज़
- 29. मैं परमाणु रूप से एमवीएन परीक्षण कैसे चला सकता हूं (स्रोत कोड के पुनर्निर्माण के बिना)?
- 30. मैं रूबी मणि की चश्मा कैसे चला सकता हूं?
आप [Spork] (साथ http://rubygems.org/ बूटस्ट्रैप कर सकता है रत्न/स्पार्क) –