Как очистить базу данных перед запуском каждого файла спецификации?
Я хочу очистить свою тестовую базу данных перед запуском каждого 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 для получения дополнительной информации.