Интеграционные тесты Rails не начинаются с нуля

У меня возникают трудности при запуске нескольких интеграционных тестов на Rails 4 (теперь они называются системными тестами в Rails 5).

Окружение: Rails 4 / Minitest / Capybara / Poltergeist работает на сервере Puma.

  1. Когда я запускаю один тест, который создает новую запись, он работает каждый раз.

    RAILS_ENV="test" ruby -I test test/integration/requests_test.rb -n /create_new/
    
  2. Когда я запускаю весь набор тестов, вышеописанный тест не удается создать каждый раз, потому что запись уже существует.

    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
Другие вопросы по тегам