База данных не очищается при тестировании контроллеров с RSpec

#ruby-on-rails #rspec #database-cleaner

#ruby-on-rails #rspec #database-cleaner

Вопрос:

При тестировании моих моделей с RSpec я использую следующий код для очистки моей базы данных:

 config.before(:suite) do
  begin
    DatabaseCleaner.start
  ensure
    DatabaseCleaner.clean
  end
end

config.after(:suite) do
  DatabaseCleaner.clean_with(:truncation)
end
  

Все тесты моей модели проходят, но когда я тестирую свои контроллеры, они, похоже, используют тот же набор данных, с которым работают мои модели, что приводит к ошибке в моих тестах.

Я могу заставить свои тесты контроллера проходить, используя вместо этого этот код:

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

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

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

Однако это приводит к сбою тестов моей модели. Есть какие-нибудь советы о том, как объединить эти блоки, не нарушая ни один набор тестов, ни другой?

Ответ №1:

Вы не упомянули ни конкретные версии database_cleaner, ни свою базу данных. Но последняя конфигурация для database_cleaner в RSpec использует обходной фильтр

https://github.com/DatabaseCleaner/database_cleaner#rspec-example

Комментарии:

1. Извините за это, я использую последнюю версию. Это идеально!

2. Потрясающе! Конфигурация database_cleaner время от времени меняется.