所以即時運行SQLite並試圖使用燈具加載正確的數據顯示和測試通過與水豚瀏覽器。SQLite3:繁忙的例外與水豚/ 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
由於IM使用夾具將這個也許是一個DB清潔問題(我不是現在使用它作爲我只是在使用預先創建燈具目前)我」我從來沒有使用DB清潔劑與微型,因爲我只熟悉與rspec和工廠女孩使用它。
我希望我可以發佈代碼,但因爲它是工作代碼......我不能。事情是,雖然測試只是打開一個頁面並加載用戶,而另一個測試成功。然而,另一個測試只是使用minitest和用戶代理,'紅寶石'page.driver與水豚。而我正在用水豚使用poltergeist。 – msmith1114
@ msmith1114我不明白'cap.dara與pagebdriver'是什麼意思,如果你的意思是它使用racktest驅動程序,那麼這是一個巨大的差異,因爲它全部在同一個線程中運行 - 因此只有一個數據庫連接。當使用poltergeist時,至少有2個線程(測試,應用程序)並且可能更多,當頁面加載和多個數據庫連接時可以有多個請求。如果你的應用程序實際上並沒有在生產交換中使用sqlite來測試你在生產中使用的任何東西,那麼你將有一個更容易的時間。 –
問題是我們的產品數據庫是一個非常古老的SQL-Server版本,因此數據庫清潔工程師將無法使用,因此每次都要回到一個乾淨的版本基本上是不可能的。有沒有辦法解決這個sqlite問題?或者我現在只需要堅持使用基於非瀏覽器的測試。和它說它使用的驅動程序(別人寫這記得)被設置爲:'page.driver.header('User-Agent','Ruby')'這即時猜測意味着它使用機架驅動程序 – msmith1114