Tôi đang cố gắng lấy một số ví dụ RSpec làm việc với Capybara bằng trình điều khiển javascript (w/Webkit hoặc Poltergeist) nhưng có vấn đề về khóa với cơ sở dữ liệu khi cập nhật bảng. Đây là một phần của ví dụ được đề cập:Cơ sở dữ liệu hết giờ khi chạy RSpec/Capybara với trình điều khiển javascript
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"
Tôi đang sử dụng Devise và Warden::Test::Helpers
để đăng nhập.
Chạy RSpec mất một thời gian và tất cả tôi nhận được:
Failure/Error: visit "/contracts/#{contract.id}/edit"
Capybara::Driver::Webkit::WebkitInvalidResponseError:
Unable to load URL: http://127.0.0.1:46520/contracts/1/edit
Nhật ký cho thấy rằng có một cơ sở dữ liệu khóa vấn đề:
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
Tôi đã thử rất nhiều thứ (câu hỏi dường như gần nhất với giải pháp thực tế: Capybara with :js => true causes test to fail) nhưng không có gì hiệu quả, thậm chí loại bỏ DatabaseCleaner. Có điều gì khác tôi có thể thử không?
Sửa: Dưới đây là các tập tin spec_helper.rb
theo yêu cầu: https://gist.github.com/2855631
Bạn có thể đăng tệp spec_helper của mình không? – DVG
@DVG Tôi đã chỉnh sửa câu hỏi của mình bằng một liên kết tới gist. –