所以即时运行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