Как почистить базу данных между различными функциями огурцов?
У меня проблемы с очисткой базы данных между функциями. Я попытался использовать ловушки Before, но он работает для каждого сценария, но мне нужно очищать базу данных только в начале каждой функции, а не между сценариями.
Любые предложения будут полезны.
4 ответа
Я использую DatabaseCleaner https://github.com/DatabaseCleaner/database_cleaner Я доволен
config.before(:each) do |spec|
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.start
...
end
config.append_after(:each) do
DatabaseCleaner.clean
end
в rails_herper.rb
Вот пример конфигурации
before(:all) do
DatabaseCleaner.clean
end
В RSpec у вас есть теги, типы, хуки и т. Д. В вашем случае проще всего будет добавить before(: all)
в каждом файле. Это начнет очистку перед всеми тестами в описанном контексте.
Из документации Rspec Docs
before (: все) блоки запускаются один раз перед всеми примерами в группе
Просто обойти / взломать, на случай, если вы еще не нашли решение. Хитрость здесь в том, чтобы использовать помеченные огурцы крючки!
Добавьте тег типа @LastScenario в ваш последний сценарий в файле (-ах) объектов. Затем с помощью ловушки @After cucumber выполните действие, скажем, очистка данных в вашем случае. Что-то вроде: @LastScenario Scenario: Имя моего сценария Учитывая, что у меня есть что-то...
А затем в классе Hooks.java:
public class Hooks {
@After("@LastScenario")
public void dataCleanUp() {
CleanUpScripts cleanUpScripts = new CleanUpScripts();
cleanUpScripts.dataCleanUp();
}
}
То же самое можно сделать с помощью @Before Hook - в зависимости от того, что требуется.
Вы можете очистить базу данных до (не после) каждого сценария с помощью следующего кода. Просто добавьте его в свой features/support/env.rb
Cucumber::Rails::Database.autorun_database_cleaner = false
DatabaseCleaner.strategy = :truncation
Cucumber::Rails::Database.javascript_strategy = :truncation
Before do
DatabaseCleaner.clean
end
База данных должна быть очищена перед каждым сценарием, как намеревается Cucumber. Отключение Cucumber от этого - ложная оптимизация и распространенный анти-паттерн, за которым следует множество менее опытных пользователей Cucumber. Сценарии никогда не должны зависеть друг от друга.
Чтобы заставить это работать, удалите любой код, который вы добавили в свое приложение, чтобы ограничить, как огурец очищает базу данных.
Если вы не уверены, как это сделать, создайте новый проект rails, используя те же версии ruby и rails, которые вы используете, а затем добавьте гем cucumber-rails. Это настроит все, как задумано. Вы можете использовать разницу до / после огурцов-рельсов для сравнения.