Подтвердить что ты не робот

DatabaseCleaner + RSpec: какая правильная конфигурация?

Я включил database_cleaner gem в мое приложение rails. Последовал пример, приведенный в репозитории git и включил следующий код в spec_helper:

Подход 1

  config.before(:suite) do
   DatabaseCleaner.strategy = :transaction
   DatabaseCleaner.clean_with(:truncation)
  end

  config.around(:each) do |example|
   DatabaseCleaner.cleaning do
    example.run
   end
  end

Когда я запускаю rspec, я получаю ошибку как NoMethodError:undefined method 'cleaning' for DatabaseCleaner:Module.

Итак, я сделал некоторые исследования и обнаружил, что я мог заменить блок config.around выше примерно следующим образом:

Подход 2

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

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

ИЛИ

Подход 3

config.around(:each) do |example|
  DatabaseCleaner.start
  example.run
  DatabaseCleaner.clean
end

Оба подхода 2 и 3 работают хорошо.
Я также просмотрел репозиторий git database_cleaner и обнаружил, что метод cleaning действительно существует и со следующим кодом:

def cleaning(&block)
     start
     yield
     clean
   end

который точно такой же, как и в примере 3. Если он существует, то почему он недоступен? Я что-то пропустил. Любая настройка? Или подходит подход 2 или 3?

4b9b3361

Ответ 1

Наконец нашел ответ,

database_cleaner gem добавила метод cleaning только на прошлой неделе, а также обновила документацию для нее. НО это изменение недоступно в последней версии gem версии 1.2.0, которую я получил от rubygems.org. Approach 1 отлично работает, когда я источник драгоценного камня от github, как показано ниже:

gem 'database_cleaner', git: '[email protected]:DatabaseCleaner/database_cleaner.git'

Ответ 2

Вы можете использовать подход в документации, если вы потянете драгоценный камень от Github

gem 'database_cleaner', git: '[email protected]:bmabey/database_cleaner.git'

Ответ 3

Если у вас есть эта же проблема с помощью mongoid, вы можете добавить это в Gemfile, изменить версию и подобрать пакет.

gem 'database_cleaner', '~> 1.4.1'

Затем создайте папку поддержки в

spec/support/database_cleaner.rb

Требовать database_cleaner.rb в файле spec_helper, я использую gem 'require_all' следующим образом:

# spec/spec_helper.rb
require 'require_all'

require_rel 'support'

Добавьте следующие очистители в базу данных_cleaner.rb

RSpec.configure do |config|

  # Cleanup the DB in between test runs
  config.before(:suite) do
    DatabaseCleaner[:mongoid].strategy = :truncation
    DatabaseCleaner[:mongoid].clean_with(:truncation)
  end

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

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

end

Ваши тесты должны теперь правильно разорваться.