gpt4 book ai didi

ruby-on-rails - SQLite3 :Busy exception with Capybara/Poltergeist

转载 作者:行者123 更新时间:2023-12-03 04:22:11 24 4
gpt4 key购买 nike

所以我正在运行 SQLite 并尝试使用固定装置加载正确的数据,以便使用 capybara 通过浏览器进行显示和测试。

我的测试套件使用带有 Capybara 和 Poltergeist 的 Minitest 作为驱动程序。我的 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 应用程序 stub 用户访问级别登录,然后简单地访问该路由。

但是,它在我使用的“用户访问 stub ”方法上失败了。看起来像 Core::User.any_instance.stubs(etc...) ,它只是返回一个用户模型。

无论如何,我得到的确切错误是:

ActiveRecord::StatementInvalid:         ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked: commit transaction

由于我使用固定装置,这可能是一个数据库清理问题(我现在不使用它,因为我目前只使用预先创建的固定装置)我从未将数据库清理与 minitest 一起使用,因为我只熟悉将它与 rspec 一起使用还有工厂女孩。

最佳答案

该错误告诉您另一个数据库连接已打开 sqlite 进行写入(它可以处理多个读取器,但一次只能处理一个写入器)。您没有显示您的实际测试或 stub ,因此不可能具体说明您的问题出在哪里,但很可能您已发出请求,然后在发生时运行一些其他数据库访问(例如,您是否预加载了对象 stub 返回,还是在执行 stub 时加载它?)。

如果您的应用程序不使用 sqlite 作为数据库,则切换到应用程序将在生产中使用的数据库上进行测试。此外, stub 是功能测试中的反模式,您应该只创建适当的记录并处理它们。

关于ruby-on-rails - SQLite3 :Busy exception with Capybara/Poltergeist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44662005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com