mysql - Rspec 和 capybara : saving results to database?

标签 mysql ruby-on-rails rspec capybara database-cleaner

我对 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 通常并不意味着对数据库进行永久更改;它只是用于对数据库进行永久更改。您推荐其他程序/ gem 吗?

我目前有config.use_transactional_fixtures = false,并且还根据一些网站的推荐添加了以下内容: 类 ActiveRecord::Base mattr_accessor :共享连接 @@shared_connection = nil

  def self.connection
    @@shared_connection || retrieve_connection
  end
end
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection 

重申一下,我确实希望 Capybara 写入我的数据库(我们使用 SQL)。我可以做些什么不同的事情?它与数据库清理有什么关系吗?

最佳答案

是的,它与database_cleaner有关。如果您设置正确,它将在场景之间清理您的数据库,以保持测试隔离。

有几种方法可以实现您想要的功能:

  1. 您可以明确告诉 database_cleaner 不要在场景之间清理某些表:

    DatabaseCleaner.strategy = :transaction, {异常(exception):[:countries, :states]} DatabaseCleaner.clean_with(:truncation, {异常(exception): [:countries, :states]})

  2. 您可以将代码添加到 before(:each)before(:all) block

  3. 您可以将数据添加到一个或多个灯具

只有少数情况下您应该在场景之间共享数据(即国家/地区、州表格,这些是 #3 的良好候选者)

在任何其他情况下,我建议不要在场景之间共享数据。

关于mysql - Rspec 和 capybara : saving results to database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24851844/

相关文章:

ruby-on-rails - 数据库建模歌曲播放列表

ruby - 如何测试来自 rake 任务的系统调用

ruby-on-rails - rspec 中的模拟 Controller 方法

ruby - 在 Aruba 中测试 CLI 时如何解决 Cucumber::Ambiguous 匹配错误

php - 简单的搜索功能总是返回 0 个结果

MySQL 查询在 v4.1.22 上运行良好但在 v5.x 上运行不正常

mysql - 由于证书错误,无法为 Fabric-ca 服务器设置 mysql 数据库

ruby-on-rails - rails : Better way to create variables for views

php - MySQL 检索使用 DAYOFWEEK 存储的每周事件

ruby-on-rails - Rails 应用程序随机崩溃,错误为 "Premature end of script headers"