【问题标题】:rspec with mongoid, devise, database_cleaner : ActiveRecord::ConnectionNotEstablished error带有 mongoid、devise、database_cleaner 的 rspec:ActiveRecord::ConnectionNotEstablished 错误
【发布时间】:2014-12-04 12:26:44
【问题描述】:

我正在尝试将 rspec 与 mongoid、devise、database_cleaner 一起使用,但出现此错误

 Failure/Error: Unable to find matching line from backtrace
 ActiveRecord::ConnectionNotEstablished:
   ActiveRecord::ConnectionNotEstablished
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:541:in `retrieve_connection'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_handling.rb:113:in `retrieve_connection'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/connection_handling.rb:87:in `connection'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/fixtures.rb:499:in `create_fixtures'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/fixtures.rb:984:in `load_fixtures'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/fixtures.rb:957:in `setup_fixtures'
 # /home/adham/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.8/lib/active_record/fixtures.rb:806:in `before_setup'

我的 gemfile 测试组

group :development, :test do
    gem "factory_girl_rails", "~> 4.0"
  gem 'rspec-rails', '~> 3.1.0'
  gem 'spork', '~> 0.8.5'
  gem 'mongoid-rspec', '~> 2.0.0.rc1'
  gem 'capybara'
  gem 'database_cleaner'
  gem 'shoulda-matchers'
end

还有我的 rails_helper.rb ==

ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require "mongoid"
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

RSpec.configure do |config|
    config.fixture_path = "#{::Rails.root}/spec/fixtures"
    config.use_transactional_fixtures = false
  config.include Mongoid::Matchers
  config.include FactoryGirl::Syntax::Methods
  config.infer_spec_type_from_file_location!
end

我该怎么办??

【问题讨论】:

  • 你的 config/application.rb 文件里有什么?
  • 你找到解决这个问题的方法了吗?

标签: ruby-on-rails rspec devise mongoid database-cleaner


【解决方案1】:

我遇到了同样的错误。

我安装的 gem 的版本:

rails (4.2.0)
rspec (3.2.0)
rspec-core (3.2.2)
rspec-expectations (3.2.0)
rspec-mocks (3.2.1)
rspec-rails (3.2.1)
rspec-support (3.2.2)
mongoid-rspec (2.2.0)

我已尝试禁用所有模式的灯具,包括所有变化的

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

没有什么能解决这个错误。

经过一些研究,我尝试修补 rails ActiveRecord 以手动禁用固定装置(因为 MongoID 不支持此功能)。现在,Rspec 可以像魅力一样与 MongoID 一起使用!

只需使用以下内容创建文件 spec/support/disable_active_record_fixtures.rb

module ActiveRecord::TestFixtures
  def before_setup
    super
  end

  def after_teardown
    super
  end
end

别忘了在 rails_helper.rb 中需要这个文件

如果您使用的是 DatabaseCleaner,您需要创建另一个包含此内容的支持文件:

RSpec.configure do |config|
  config.before(:suite) do
    DatabaseCleaner[:mongoid].strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner[:mongoid].start
  end

  config.after(:each) do
    DatabaseCleaner[:mongoid].clean
  end
end

【讨论】:

  • 这个解决方案对我来说非常有效。问题出现时,我已从 Rails 4.0 升级到 Rails 4.1。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
相关资源
最近更新 更多