Rails 5.1 Настройка встроенных системных тестов с помощью RSpec

После просмотра RailsConf видео в ActionDispatch:: systemTestCase, я был рад включить его в свое текущее приложение. В настоящее время наша установка тестового набора использует следующее:

Трудно было настроить конфигурацию для нашей текущей настройки, но в итоге мы ее работали, во многом благодаря статье Авди Гримма под названием: Настройка database_cleaner с Rails, RSpec, Capybara и Selenium.

Моя надежда состояла в том, чтобы использовать встроенные системные тесты рельсов, выпущенных в рельсах 5.1. Поскольку в rails теперь встроено системное тестирование: все, что мне нужно будет беспокоиться о настройке, следующее:

  • rspec
  • factory_girl

И это потому, что ActionDispatch::systemTestCase заботится о capybara, database_cleaner, и он уже настроен для драйвера selenium.

Например: в настоящее время мой feature specs написан так (Capybara в контексте RSpec):

#spec/features/blogs/creating_blogs_spec.rb
require "rails_helper"

RSpec.feature "Logged in User can create a blog" do
  before do
    create(:logged_in_user)
  end

  scenario "successfully", js: true do
    ...
  end
end 

Таким образом, типичная спецификация интеграции/функции/системы может выглядеть как для набора тестов, настроенного с параметрами rspec, database_cleaner, factory_girl и capybara. Я хотел бы преобразовать его в использование ActionDispatch::systemTestCase.

Однако: я хотел бы использовать ActionDispatch::systemTestCase в контексте rspec.

Видео RailsConf, приведенное выше, показывает, как ActionDispatch:: systemTestCase работает в контексте шаблона набора тестов по умолчанию rails (например: minitest с тесты, расположенные в каталоге test), но в нем не обсуждалось, как использовать ActionDispatch:: systemTestCase в контексте RSpec.

Я не мог найти никаких ресурсов для создания встроенных системных тестов rails, настраиваемых с помощью RSpec, в том числе в разделе системного тестирования направляющих рельсов. Возможно ли это?

Ответ 1

Обновление октября 2017 года:

Rspec-rails 3.7 теперь полностью совместим с системными тестами.

В принципе, это все, что вам нужно добавить в свой spec_helper.rb:

RSpec.configure do |config|
  config.before(:each, type: :system) do
    driven_by :rack_test
  end

  config.before(:each, type: :system, js: true) do
    driven_by :selenium_chrome_headless
  end
end

https://medium.com/table-xi/a-quick-guide-to-rails-system-tests-in-rspec-b6e9e8a8b5f6