所以即时运行SQLite并尝试使用fixture来加载适当的数据,以便通过浏览器显示和测试capybara。
我的测试套件使用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应用程序存根用户访问级别登录,然后只是访问该路径。
然而,它似乎未能成为&#34; User Access Stubbing&#34;我正在使用的方法。看起来像Core::User.any_instance.stubs(etc...)
只是返回一个用户模型。
无论如何,我得到的确切错误是:
ActiveRecord::StatementInvalid: ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked: commit transaction
因为我使用灯具这可能是一个DB清洁器问题(我现在没有使用它,因为我目前只使用预先创建的灯具)我从来没有使用过DB的小清洁工,因为我只熟悉使用它与rspec和工厂女孩。
答案 0 :(得分:1)
错误告诉您另一个数据库连接已经打开了sqlite(它可以处理多个读取器,但一次只能处理一个编写器)。您没有显示您的实际测试或存根,因此无法明确说明您的问题所在,但很可能您已经提出请求,然后正在运行其他数据库访问#&# 39; s正在发生(例如,你预先加载了存根返回的对象,还是在执行存根时加载它?)。
如果你的应用程序没有使用sqlite作为它的数据库,那么交换到应用程序将在生产中使用的数据库的测试。此外,存根是功能测试中的反模式,您应该只创建正确的记录并处理它们。