Интеграционные тесты Rails не начинаются с нуля
У меня возникают трудности при запуске нескольких интеграционных тестов на Rails 4 (теперь они называются системными тестами в Rails 5).
Окружение: Rails 4 / Minitest / Capybara / Poltergeist работает на сервере Puma.
Когда я запускаю один тест, который создает новую запись, он работает каждый раз.
RAILS_ENV="test" ruby -I test test/integration/requests_test.rb -n /create_new/
Когда я запускаю весь набор тестов, вышеописанный тест не удается создать каждый раз, потому что запись уже существует.
RAILS_ENV="test" ruby -I test test/integration/requests_test.rb
Я подтвердил это, добавив puts Request.all.collect(&:name)
в начале - при запуске группы запись создается уже в БД.
Вот основная проблема - БД не всегда свежа для каждого теста. (Это свежо для моих юнит-тестов и моих функциональных тестов, в группах и отдельных лицах.) Как я могу убедиться, что мои интеграционные тесты также начинаются каждый раз заново?
В случае, если это полезно, кажется, что приведенная выше команда запускает Puma в режиме разработки, хотя я и указал ENV['RAILS_ENV'] = 'test'
в test_helper.rb
,
1 ответ
Вы проверили драгоценный камень database_cleaner ( https://github.com/DatabaseCleaner/database_cleaner)? Вы можете использовать его для очистки базы данных каждый раз, когда вы запускаете новый интеграционный тест в вашей конфигурации RailsHelper. Я бы проверил их документацию, но моя выглядит так:
DatabaseCleaner.strategy = :truncation
RSpec.configure do |config|
config.before(:each) do
DatabaseCleaner.clean
end
config.after(:each) do
FactoryGirl.reload #if you're using FactoryGirl
end
end