2013-02-17 66 views
6

के लिए वेबकिट ड्राइवर पर अनिश्चित काल तक लटका हुआ है, मैं capybara-webkit ड्राइवर पर समानांतर_टैस्ट के माध्यम से अपनी चश्मा चला रहा हूं। मैं निम्नलिखित गहरे लाल रंग का वातावरण है:।समानांतर परीक्षण निष्पादन rspec

ruby -v 
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.4.2] 

एक gemset जिसमें पर rvm के माध्यम से चल रहा है निम्नलिखित (, capybara, रेल, rspec, और parallel_tests प्रासंगिकता के लिए के लिए छोटा कर दिया, तो मेरी gemset की एक बड़ी लपेटना देखकर मदद मिलेगी कृपया मुझे पता है) करते हैं:

*** LOCAL GEMS *** 

... 
capybara (1.1.2) 
parallel_tests (0.8.12) 
rails (3.2.11) 
rspec (2.11.0) 

जब मैं rake spec के साथ एक एकल प्रक्रिया पर अपने परीक्षण सूट चलाने के लिए, मेरे परीक्षण के सभी पूरा करने चलाते हैं। हालांकि, जब parallel_tests के माध्यम से चलाने, निम्न होता है:

8 processes for 220 specs, ~ 27 specs per process 

प्रक्रियाओं whereafter अंत में वापस आ रहा शुरू कर देंगे:

Finished in 11 minutes 15.76 seconds 
Finished in 11 minutes 28.89 seconds 

लेकिन, के बाद पहले 6 प्रक्रियाओं वापस आना, parallel_spec अनिश्चित काल के लिए रखती हूँ, कभी समाप्त नहीं करें, और शेष 2 प्रक्रियाओं के लिए आउटपुट मुद्रित न करें।

मैं 2.4 गीगाहर्ट्ज इंटेल i7 के साथ एक मैकबुक प्रो चल रहा ओएस एक्स शेर पर हूं।

तो मेरा प्रश्न सरल है: यह क्यों लटक रहा है, मैं इसे कैसे लटक सकता हूं, और मैं इसे लटकने से कैसे रोक सकता हूं और समांतर_स्टेट को पूरा करने की अनुमति देता हूं?

+1

क्या आपको कभी इसका समाधान मिला? मैं एक ही समस्या में भाग रहा हूँ। – blim8183

+0

डिट्टो। मैंने समानांतर_स्टेट्स और बंडलर को अपग्रेड करने के लिए अपग्रेड किया। पेचीदा। – annalogarhythm

+0

यदि आप इसे वापस 6 तक स्केल करते हैं तो क्या होगा? मैं सोच रहा हूं कि क्या आप अनजाने में अपने डेटाबेस सर्वर, या कुछ बंद कर रहे हैं .... –

उत्तर

1

आपकी आरएसपीईसी कॉन्फ़िगरेशन और लाइब्रेरी उपयोग के बारे में कुछ जानकारी गायब है जो शायद आपको इसका उत्तर मिल जाएगी। उस ने कहा, मैंने एकीकरण चश्मा के लिए rspec चलाते समय एक बहु थ्रेडेड वातावरण में समान व्यवहार देखा है।

https://github.com/grosser/parallel_tests/wiki पर मिली सलाह एकीकरण चश्मा के संबंध में भ्रामक लगती है। transactionDatabaseCleaner या use_transactional_fixtures की रणनीति पर भरोसा करने की कोशिश किसी भी गैर-अवरुद्ध डेटाबेस एडाप्टर के लिए डेडलॉक्स में होने की गारंटी है।

कैपिबारा एकीकरण चश्मा के लिए कई धागे स्पिन करता है। जब ग्राहक और सर्वर थ्रेड एक ही समय में एक ही रिकॉर्ड के साथ बातचीत करने का प्रयास करते हैं तो आप अक्सर टाइमआउट या डेडलॉक्स के साथ समाप्त हो जाते हैं। कभी-कभी डेडलॉक आपके सूट को मैन्युअल रूप से मारने तक स्थायी रूप से लटकने का कारण बन सकता है।

मुझे रोकने के लिए सबसे ठोस कॉन्फ़िगरेशन ActiveRecord उदाहरणों और DatabaseCleaner के उचित उपयोग के बीच कनेक्शन साझा करने का संयोजन है।

# integration_spec_helper.rb 

RSpec.configure do |config| 
    config.use_transactional_fixtures = false 

    class ActiveRecord::Base 
    class_attribute :shared_connection 

    def self.connection 
     self.shared_connection || retrieve_connection 
    end 
    end 

    config.before do |example| 
    ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection 

    if Capybara.current_driver == :webkit 
     DatabaseCleaner.strategy = :deletion 
    else 
     DatabaseCleaner.strategy = :transaction 
    end 

    DatabaseCleaner.start 
    end 

    config.after do 
    DatabaseCleaner.clean 
    end 
end 
+0

धन्यवाद। दुर्भाग्यवश, यह वास्तव में समस्या को ठीक नहीं करता है। –

+0

इसे सुनने के लिए खेद है। एकीकरण चश्मे के बारे में समानांतर_टेस्ट निर्देश सबसे संभावित अपराधी की तरह लग रहा था। –