SQLiteを実行し、フィクスチャを使用してcapybaraでブラウザを表示してテストするための適切なデータを読み込もうとしています。SQLite3:Capybara/Poltergeistのビジー例外
私のテストスイートでは、ドライバにMinitest w/CapybaraとPoltergeistを使用しています。私test_helper.rb
ファイルの関連部分は、そうのようになります。
require "minitest/reporters"
reporters = []
reporters << Minitest::Reporters::SpecReporter.new
Minitest::Reporters.use! reporters, ENV, Minitest.backtrace_filter
require "minitest/rails/capybara"
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, :js_errors => false)
end
Capybara.default_driver = :poltergeist
Capybara.current_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
は、しかし、私はこれが実行されているWebアプリケーションのユーザー・アクセス・レベルでのログインをスタブ簡単なテストがあり、その後、単にルートを訪問します。
しかし、私が使用している「ユーザーアクセススタビング」のように見えていません。これはちょうどユーザーモデルを返すCore::User.any_instance.stubs(etc...)
のように見えます。
とにかく私が手に正確なエラーは次のとおりです。
ActiveRecord::StatementInvalid: ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked: commit transaction
イムので器具を使用して、これは多分DBクリーナーの問題だろう(イムのみ現在あらかじめ作成された器具を使用してイムとして今それを使用していない)私は」 veは、rspecと工場の女の子との使用に慣れているだけで、minitestのDBクリーナーを使用したことはありません。
私はコードを投稿することができますが、それは作業コードなので...私は本当にできません。テストは、文字通り、ページを開いてユーザーを読み込むことですが、別のテストでは正常に実行されます。しかし、もう一つのテストではminitestとUser-Agentの 'Ruby' page.driverとcapybaraを使用しました。私はカピバラでポルターガイストを使っています。 – msmith1114
@ msmith1114ラピッドドライバを使用していると言うと、 'page.driver with capybara'の意味を理解できません。これは、すべてが単一のスレッドで同期的に実行されるため、巨大な違いです。ポラテジストを使用する場合、少なくとも2つのスレッド(テスト、アプリ)があり、ページが読み込まれ複数のDB接続がある場合には複数のリクエストを持つ可能性があります。あなたのアプリケーションが実際にsqliteを本物のスワップで使用していない場合、本番環境で使うものを使ってテストすると、はるかに簡単な時間が得られます。 –
私たちのプロダクションDBはDB Cleanerが動作しない非常に古いSQLサーババージョンですので、毎回クリーンスレートに戻ることは基本的に不可能です。このsqliteの問題を回避する方法はありますか?あるいは、私はちょうど今のところ非ブラウザベースのテストに固執する必要があります。 'page.driver.header( 'User-Agent'、 'Ruby')'は、それがラックドライバを使用していると推測しています – msmith1114