2013-03-09 2 views
6

रेलवे 3.2.12 में कैपिबरा के साथ एकीकरण परीक्षण केस है। click_link 'New Log' एक अजाक्स कॉल है। हालांकि खोला गया पृष्ठ $() के साथ शुरू होता है और इसमें js से बचने की एक गुच्छा है \ n और \ log-log।रेल के साथ AJAX कॉल के लिए कैपिबरा के साथ एकीकरण परीक्षण त्रुटि 3.2.12

it "should work with link on show customer_comm_record page" do 
     visit customer_customer_comm_records_path(@cust) 
     #visit customer_customer_comm_record_path(@cust, @crecord) 
     click_link @crecord.id.to_s  
     click_link 'New Log' 
     save_and_open_page 
end 

हम भी describe "", :js => true do के मामले में लपेट की कोशिश की, कैसे

`An error occurred in an after hook ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked:` 

कह कोड निष्पादन से बाहर कोई त्रुटि नहीं है एक त्रुटि है वहाँ। आरएसपीईसी मामले में क्या गलत है? मदद के लिए धन्यवाद।

+0

क्या आपके पास रेल कंसोल खोलकर जब आप यह देख? –

+0

मैंने रेल कंसोल का प्रयास नहीं किया। क्या त्रुटि के लिए रेल कंसोल से कुछ नया है? – user938363

+1

देखें http://stackoverflow.com/questions/6165889/database-is-locked –

उत्तर

8

ऐसा लगता है कि आपका सर्वर डेटाबेस लॉक कर रहा है ताकि परीक्षण चलाने के बाद परीक्षण साफ़ नहीं हो सके।

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

जब आप चलाने के साथ :js => true चीजें कुछ अलग हैं, सर्वर ताकि वे एक एक अलग डेटाबेस कनेक्शन और लेनदेन का उपयोग किया जाएगा एक अलग थ्रेड या अपने परीक्षण के लिए प्रक्रिया में शुरू होता है। इसका अर्थ यह है कि डेटाबेस लेनदेन रणनीति जो आरएसपीईसी डिफ़ॉल्ट रूप से साफ करने के लिए उपयोग करती है, काम नहीं करेगी। यह आपके मामले में लॉक त्रुटियों का भी कारण बन रहा है।

कैपिबरा readme इस समस्या के बारे में बात करता है और इस स्थिति में एक विकल्प के रूप में database_cleaner मणि की सिफारिश करता है। आप डेटाबेस क्लीनर कॉन्फ़िगर करने के लिए लेन-देन के बजाय काट-छांट रणनीति का उपयोग करने की आवश्यकता होगी

+0

http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/ पर विस्तृत व्याख्या के – John

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