2012-06-01 5 views
5

とRSpecの/カピバラを実行しているとき、私はいくつかのRSpecの例ではJavaScriptドライバー(W/Webkitのか、ポルターガイスト)を使用して、カピバラでの作業を取得しようとしているが、テーブルの更新時にデータベースとロックの問題があります。私がログインする工夫やWarden::Test::Helpersを使用していデータベースタイムアウト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" 

:ここで問題になっている例の一部です。 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)が、何も働いていた、でもDatabaseCleanerを取り除きます。私が試すことができる他のものはありますか?

編集:ここでは要求されたとしてspec_helper.rbファイルです:https://gist.github.com/2855631

+0

あなたspec_helperファイルを投稿することができますか? – DVG

+0

@DVG私は要旨へのリンクで私の質問を編集しました。 –

答えて

5

それはほぼ確実にクリーンなデータを持っていることの目的のために、トランザクションの内部で、あなたの例を実行しようとしている

config.use_transactional_fixtures = true 

です。あなたはデータベースクリーナーを使用しているので、あなたはすでにこの機能を持っているので、これをfalseに設定し、あなたが行くように良いことがあります。私にとって

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

+0

どうもありがとう、これは私がそれを自分自身を発見したことがないでしょうので、明らかでした! ;-) –

0

ソリューションは正反対だった:)

私はfalseに設定しています

config.use_transactional_fixtures = false 

をそして、それはすべての働きました。 trueでは以前と同じように動作しませんでした。

関連する問題