Rails 5.1使用RSpec配置内置系统测试

Nei*_*eil 10 ruby rspec ruby-on-rails

ActionDispatch :: systemTestCase上观看RailsConf视频后,我很高兴将它整合到我当前的应用程序中.目前我们的测试套件设置使用以下内容:

很难让配置适用于我们当前的设置,但我们最终得到了它的工作,主要归功于Avdi Grimm的一篇题为" 使用Rails,RSpec,Capybara和Selenium配置database_cleaner "的文章.

我希望使用轨道中释放的轨道的内置系统测试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 
Run Code Online (Sandbox Code Playgroud)

因此,这是一个典型的集成/功能/系统规范可能是什么样子用于配置有一个测试套件rspec,database_cleaner,factory_girl,和capybara.我想将它转换为使用ActionDispatch::systemTestCase.

但是:我想ActionDispatch::systemTestCase在上下文中使用RSpec.

上面的RailsConf视频显示了ActionDispatch :: systemTestCase如何在rails的默认测试套件布局的上下文中工作(例如:minitest,测试位于test目录中),但它没有讨论如何在RSpec的上下文中使用ActionDispatch :: systemTestCase .

我找不到任何有关使用RSpec配置rails的内置系统测试的资源,包括在rails指南系统测试部分.这可能吗?

Dan*_*iel 12

2017年10月更新:

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
Run Code Online (Sandbox Code Playgroud)

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