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
ваши тесты теперь должны снести должным образом.