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

включил database_cleaner gem в моем приложении rails. Последовал примеру, приведенному в Git repo и включил следующий код в 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 repo database_cleaner и обнаружил, что cleaning метод фактически существует и со следующим кодом:

def cleaning(&block)
     start
     yield
     clean
   end

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

3 ответов


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

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

gem 'database_cleaner', git: 'git@github.com:DatabaseCleaner/database_cleaner.git'

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

gem 'database_cleaner', git: 'git@github.com:bmabey/database_cleaner.git'


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

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'

добавьте следующие очистители в database_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

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