2015-09-19 2 views
2

В чем разница между следующим?Очистка базы данных: Чистое vs усечение

  • DatabaseCleaner.clean_with (: усечение)
  • DatabaseCleaner.clean

Что я пытаюсь выяснить, что это лучший способ, чтобы очистить вверх раньше (: все) подвесьте мои тесты (производительность разумно) с использованием очистителя базы данных. My before (: all) hook просто создает тонну фабрик и создает некоторые ассоциации между ними. В настоящее время я просто загружаю их все в (раньше), чтобы не беспокоиться об очистке впоследствии.

Моя текущая стратегия выглядит следующим образом:

RSpec.configure do |config| 
    config.use_transactional_fixtures = false 

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

    config.before(:each) do |example| 
    DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction 
    DatabaseCleaner.start 
    end 

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

Таким образом, в дополнение к моему предыдущему вопросу, что должно мое после (: все) выглядит?

ответ

3

Какая разница между нижеследующим?

  • DatabaseCleaner.clean_with (: усечение)
  • DatabaseCleaner.clean

Разница довольно проста: в первом случае вы говорите DatabaseCleaner чистить дб теперь truncation стратегии , а во втором случае DatabaseCleaner очистит ваш db, используя в настоящее время настроенную стратегию.

Я думаю, что ваша установка уже неплохая. Поскольку создание тонны фабрик (как вы сказали) в before(:all), крючок довольно редок, вам просто нужно добавить к этому конкретному тесту after(:all) hook, чтобы вернуть db в стабильное состояние.

Уборка с транзакцией не будет работать, так как before(:all)is not wrapped в сделке. Вы остались с 2-х вариантов здесь:

  1. after(:all) { DatabaseCleaner.with(:truncation) }

  2. after(:all) { DatabaseCleaner.with(:deletion) }

Для того, чтобы выбрать между этими двумя, а documentation clearly states, вы должны измерить и выбрать то, что наиболее быстро для вас, или просто выберите некоторые, если это не имеет значения.

+0

Итак, для моей стратегии, DatabaseCleaner.clean в моей после (: каждый) очистки стратегии, установленной в моем раньше (: каждый)? – Jshoe523

+0

Да, так оно и работает. –

+0

Удивительная благодарность, это именно то, что я пытался выяснить – Jshoe523

Смежные вопросы