ruby-on-rails - 将 rspec、zeus 和 database_cleaner 与两个不同的 active_record 数据库一起使用以未定义的方法 `query_options' 结束,对于 nil :NilClass error

标签 ruby-on-rails activerecord zeus database-cleaner

我想使用 zeus (0.13.3) 为 ruby​​ 2.0.0 上的 rails (3.2.11) 应用程序预加载我的 rails 环境,并使用 database_cleaner (0.9.1) 清理数据库。 只要我只使用一个 mysql 数据库,这就可以正常工作。 在应用程序中,我们必须使用两个不同的 mysql 数据库。 编辑: 需要说明的是,我使用了共享连接 hack,描述为 here .

在不使用 zeus 的情况下运行我的规范,工作正常。但是,如果我使用它,则在创建错误的记录时,每个测试都会失败:

undefined method `query_options' for nil:NilClass

如何解决?

设置是这样的:

config/database.yml

test:
  database: app_test
  ...

test_second_db:
  database: other_test
  ...

在所有使用第二个连接的模型的抽象基类中

models/second_db/base.rb

module SecondDB

  class Base < ActiveRecord::Base

    establish_connection "#{Rails.env}_second_db"
    self.abstract_class = true

  end

end

在我的 spec_helper.rb 文件中,我设置了 database_cleaner:

spec/spec_helper.rb

require 'database_cleaner'

RSpec.configure do |config|
  config.use_transactional_fixtures = false

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner[:active_record,{:connection => :test_second_db}].strategy = :transaction
  end

  config.before(:each) do
    DatabaseCleaner.start
    DatabaseCleaner[:active_record,{:connection => :test_second_db}].start
  end

  config.after(:each) do
    DatabaseCleaner.clean
    DatabaseCleaner[:active_record,{:connection => :test_second_db}].clean
  end

end

编辑:

spec/support/shared_connection.rb

class ActiveRecord::Base
  mattr_accessor :shared_connection
  @@shared_connection = nil

  def self.connection
    @@shared_connection || retrieve_connection
  end
end

规范/支持/shared_connection.rb

最佳答案

不确定这是否会解决您的问题,因为我无法对其进行测试,但您可能想尝试将其添加到您的 spec_helper 文件中。

ActiveRecord::ConnectionAdapters::ConnectionPool.class_eval do
        def current_connection_id
          # Thread.current.object_id
          Thread.main.object_id
        end
end

在测试中运行浏览器时用于 Selenium。测试使用事务,浏览器是一个单独的进程,因此它看不到数据库。这可能不是问题/解决方案,但值得一试。

关于ruby-on-rails - 将 rspec、zeus 和 database_cleaner 与两个不同的 active_record 数据库一起使用以未定义的方法 `query_options' 结束,对于 nil :NilClass error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16020215/

相关文章:

ruby-on-rails - Ruby on Rails 的 gem "Devise"在 app/controllers 中甚至没有 Controller 文件?

jquery - client_side_validations gem 无法在 Rails 3.2.13 中工作

javascript - Rails "Load more..."而不是分页

ruby - 验证 ActiveRecord 时,我得到有效? => false 但 errors.count 中没有错误。怎么来的?

ruby-on-rails - 无法使用 zeus 的 parallel_tests 创建并行数据库

ubuntu - RoR burke 的 zeus gem 在使用 Ubuntu 13.04 时给出退出状态 1

ruby-on-rails - 创建多个csv文件并使用rails在一个zip归档文件中全部下载

ruby - 使用 RSpec、ActiveRecord 和 Factory Girl 的非 Rails 应用程序

ruby-on-rails - Activerecord 的记录大小(以字节为单位)

Ruby Rbenv 试图从 Bundle 运行 Zeus,尽管它是一个全局性的 gem(使用 ZSH)