5

javascriptドライバー(WebkitまたはPoltergeist付き)を使用してCapybaraで動作するRSpecの例をいくつか取得しようとしていますが、テーブルを更新するときにデータベースにロックの問題があります。問題の例の一部を次に示します。

  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"

Deviseとを使用し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

私はたくさんのことを試しましたが(その質問は実際の解決策に最も近いように見えました::js => trueのCapybaraはテストを失敗させます)、DatabaseCleanerを削除しても何も機能しませんでした。他に試すことができるものはありますか?

編集spec_helper.rb要求されたファイルは次のとおりです:https ://gist.github.com/2855631

4

2 に答える 2

5

ほぼ確実です

config.use_transactional_fixtures = true

クリーンなデータを取得する目的で、トランザクション内でサンプルを実行しようとしています。データベースクリーナーを使用しているので、すでにこの機能を使用しているので、これをfalseに設定すれば、問題なく使用できます。

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

于 2012-06-01T23:06:01.247 に答える
0

私にとって、解決策は正反対でした:)

私はそれをに設定しましたfalse

config.use_transactional_fixtures = false

そして、それはすべてうまくいきました。true以前のように機能していませんでした。

于 2016-12-28T10:55:31.543 に答える