我对 RSpec 还很陌生,一直在尝试为我的网站创建一些测试,用户可以在这些测试上向网站发布预订,然后将其保存到我们的数据库中。我一直在尝试使用 Rspec 和 Capybara 来模拟用户向网站发布预订。我们有一个现有的测试数据库,并且在 Rspec 测试结束时希望将新保留写入数据库,而不是在 Rspec 测试结束时删除。
当我们运行代码时会发生两件事之一:要么它“工作”,但在数据库中找不到新的预留,要么我们得到这个错误:
Failure/Error: Unable to find matching line from backtrace
ActiveRecord::StatementInvalid:
Mysql2::Error: This connection is in use by: #<Thread:0x007fb421fd6218 sleep>: SELECT `users`.* FROM `users` WHERE `users`.`id` = 6 ORDER BY `users`.`id` ASC LIMIT 1
# ./app/controllers/application_controller.rb:95:in `pass_login_status_to_js'
# ./app/middleware/search_suggestions.rb:12:in `call'
为什么会发生这种情况?我意识到 Capybara 通常并不意味着对数据库进行永久性更改。您推荐其他程序/宝石吗?
我目前有config.use_transactional_fixtures = false
,并且还根据一些网站的推荐添加了以下内容:class ActiveRecord::Base mattr_accessor :shared_connection @@shared_connection = nil
def self.connection
@@shared_connection || retrieve_connection
end
end
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
重申一下,我确实希望 Capybara 写入我的数据库(我们使用 SQL)。我能做些什么不同的事情?它与数据库清理器有关吗?