2012-06-01 15 views
5

के साथ आरएसपीसी/कैपिबरा चलाते समय डाटाबेस टाइमआउट मैं जावास्क्रिप्ट ड्राइवर (डब्ल्यू/वेबकिट या पोल्टरजिस्ट) का उपयोग कर कैपिबारा के साथ काम कर रहे कुछ आरएसपीसी उदाहरण प्राप्त करने की कोशिश कर रहा हूं लेकिन तालिका अपडेट करते समय डेटाबेस के साथ लॉकिंग समस्या है।जावास्क्रिप्ट ड्राइवर

scenario 'by changing the contract attributes', js: true do 
    login_as @admin, scope: :user 

    contract = Contract.create(number: '123', 
           start_at: Date.today, 
           end_at: Date.today + 1.month) 

    visit "/contracts/#{contract.id}/edit" 

मैं लॉगइन करने के लिए वसीयत और Warden::Test::Helpers उपयोग कर रहा हूँ: यहाँ सवाल में उदाहरण का हिस्सा है।

RSpec चल रहा है कुछ समय लगता है और सभी मुझे मिलता है:

Failure/Error: visit "/contracts/#{contract.id}/edit" 
Capybara::Driver::Webkit::WebkitInvalidResponseError: 
    Unable to load URL: http://127.0.0.1:46520/contracts/1/edit 

लॉग दिखाया जा रहा है एक डेटाबेस लॉकिंग मुद्दा यह है कि:

Started GET "/contracts/1/edit" for 127.0.0.1 at 2012-06-01 12:10:26 -0400 
    (0.2ms) BEGIN 
    (51083.3ms) UPDATE `users` SET `last_sign_in_at` = '2012-06-01 16:10:26', `current_sign_in_at` = '2012-06-01 16:10:26', `last_sign_in_ip` = '127.0.0.1', `current_sign_in_ip` = '127.0.0.1', `sign_in_count` = 1, `updated_at` = '2012-06-01 16:10:26' WHERE `users`.`id` = 1 
Mysql2::Error: Lock wait timeout exceeded; try restarting transaction: UPDATE `users` SET `last_sign_in_at` = '2012-06-01 16:10:26', `current_sign_in_at` = '2012-06-01 16:10:26', `last_sign_in_ip` = '127.0.0.1', `current_sign_in_ip` = '127.0.0.1', `sign_in_count` = 1, `updated_at` = '2012-06-01 16:10:26' WHERE `users`.`id` = 1 
    (0.8ms) ROLLBACK 

मैं कोशिश की है चीजों के बहुत सारे (उस सवाल का लग रहा था एक वास्तविक समाधान के निकटतम: Capybara with :js => true causes test to fail) लेकिन कुछ भी काम नहीं किया, यहां तक ​​कि डेटाबेस क्लीनर से छुटकारा पा रहा है। क्या मैं कुछ और कोशिश कर सकता हूं?

संपादित: यहाँ spec_helper.rb फ़ाइल के रूप में अनुरोध किया है: https://gist.github.com/2855631

+0

क्या आप अपनी spec_helper फ़ाइल पोस्ट कर सकते हैं? – DVG

+0

@ डीवीजी मैंने अपने प्रश्न को जिस्ट के लिंक के साथ संपादित किया है। –

उत्तर

5

यह लगभग निश्चित रूप

config.use_transactional_fixtures = true 

कौन सा साफ डेटा होने के प्रयोजन के लिए, एक सौदे के अंदर अपने उदाहरण भागने की कोशिश कर रहा है। चूंकि आप डेटाबेस क्लीनर का उपयोग कर रहे हैं, आपके पास पहले से ही यह सुविधा है, इसलिए इसे गलत पर सेट करें और आपको जाने के लिए अच्छा होना चाहिए।

https://www.relishapp.com/rspec/rspec-rails/docs/transactions

+0

बहुत बहुत धन्यवाद, यह इतना स्पष्ट था कि मैंने इसे कभी नहीं पाया होगा! ;-) –

0

मेरे लिए समाधान false के ठीक सामने :)

मैं इसे स्थापित किया है था:

config.use_transactional_fixtures = false 

और यह सब काम किया। true के साथ यह पहले की तरह काम नहीं कर रहा था।

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