#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 время от времени меняется.