Использование database_cleaner, mongoid и active_admin вызывает сбой спецификации с ActiveRecord :: ConnectionNotEstablished - PullRequest
7 голосов
/ 05 марта 2012

У меня есть проект, использующий mongoid, database_cleaner и rspec. Я пытаюсь добавить active_admin, используя патчи active_admin . ActiveAdmin предполагает, что он находится в проекте ActiveRecord, в частности, благодаря своей зависимости от гема meta_search.

Когда я запускаю свои спецификации, все они терпят неудачу со следующей ошибкой:

Failure/Error: Unable to find matching line from backtrace
ActiveRecord::ConnectionNotEstablished:
  ActiveRecord::ConnectionNotEstablished
# ./spec/support/database_cleaner.rb:12:in `block (2 levels) in <top (required)>'

Версии гемов связанных библиотек:

  • activeadmin (0.4.2)
  • database_cleaner (0.7.1)
  • монгоид (2.4.5)
  • meta_search (1.1.3)
  • activerecord (3.2.1)

Файл, на котором не пройдены тесты, spec/support/database_cleaner.rb:

require 'database_cleaner'

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

  config.before(:each) do
    DatabaseCleaner.clean
  end
end

1 Ответ

14 голосов
/ 05 марта 2012

[перемещено из вопроса]

Похоже, что database_cleaner пытается автоматически определить доступные для него ORM в его метод инициализации

Это можетбыть прерванным путем изменения файла spec/support/database_cleaner.rb следующим образом:

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

Вызов метода [] в конфигурации отменяет автоопределение, так что ActiveRecord больше не добавляется.

Другим обходным решением было бы повторно добавить файл config/database.yml с конфигурацией sqlite3, которую остальная часть приложения игнорировала.К счастью, в этом нет необходимости.

...