Как очистить базу данных перед запуском каждого файла спецификации?

Я хочу очистить свою тестовую базу данных перед запуском каждого spec-файла.

Я уже использую rspec с заводской девушкой.

Спасибо заяц

2 ответа

Добавить в RSpec.configure блок в вашем spec_helper.rb

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

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

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

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

Должно работать

В вашем spec_helper.rb внутри блока RSpec.configure

RSpec.configure do |config|

  # ...

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

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

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

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

  # ...
end

before(:all) и after(:all) запускаются для каждого файла спецификации, а не до и после всего набора. Итак, для каждого файла спецификации вы сможете очистить базу данных, используя любую из трех стратегий: транзакция,: усечение,: удаление.

Это то, что я обычно делаю для DatabaseCleaner

# Database Cleaner
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

Это обеспечит наличие чистой базы данных для каждого теста.

Ознакомьтесь с соответствующей, хотя и старой, статьей Avdi для получения дополнительной информации.

Другие вопросы по тегам