Skip to content

Commit d3dc4fe

Browse files
authored
Merge pull request #2356 from mec/example/of-rspec-features-not-working-as-expected
Add `SystemSpecHelpers` for use with RSpec
2 parents b2ce4d7 + 528fc0e commit d3dc4fe

File tree

14 files changed

+104
-38
lines changed

14 files changed

+104
-38
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ jobs:
3535
rails_version: "7.2"
3636
- ruby_version: "3.4"
3737
rails_version: "8.0"
38-
- ruby_version: "head"
39-
rails_version: "main"
38+
# - ruby_version: "head"
39+
# rails_version: "main"
4040
env:
4141
BUNDLE_GEMFILE: gemfiles/rails_${{ matrix.rails_version }}.gemfile
4242
steps:
@@ -49,7 +49,7 @@ jobs:
4949
- name: Build and test with Rake
5050
run: |
5151
bundle exec appraisal rails-${{ matrix.rails_version }} bundle --quiet
52-
MEASURE_COVERAGE=true bundle exec appraisal rails-${{ matrix.rails_version }} rake
52+
MEASURE_COVERAGE=true bundle exec appraisal rails-${{ matrix.rails_version }} rake all_tests
5353
env:
5454
RAISE_ON_WARNING: 1
5555
RAILS_VERSION: ${{ matrix.rails_version }}

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ group :development, :test do
3838
gem "slim", "~> 5"
3939
gem "sprockets-rails", "~> 3"
4040
gem "standard", "~> 1"
41+
gem "turbo-rails"
4142
gem "warning"
4243
gem "yard-activesupport-concern", "< 1"
4344
gem "yard", "< 1"

Gemfile.lock

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,9 @@ GEM
355355
thor (1.3.2)
356356
tilt (2.6.0)
357357
timeout (0.4.3)
358+
turbo-rails (2.0.16)
359+
actionpack (>= 7.1.0)
360+
railties (>= 7.1.0)
358361
tzinfo (2.0.6)
359362
concurrent-ruby (~> 1.0)
360363
unicode-display_width (3.1.4)
@@ -415,6 +418,7 @@ DEPENDENCIES
415418
slim (~> 5)
416419
sprockets-rails (~> 3)
417420
standard (~> 1)
421+
turbo-rails
418422
view_component!
419423
warning
420424
yard (< 1)

Rakefile

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,14 @@
22

33
require "bundler/gem_tasks"
44
require "rake/testtask"
5+
require "rspec/core/rake_task"
56
require "yard"
67
require "yard/mattr_accessor_handler"
8+
require "rails/version"
9+
require "simplecov"
10+
require "simplecov-console"
11+
12+
RSpec::Core::RakeTask.new(:spec)
713

814
Rake::TestTask.new(:test) do |t|
915
t.libs << "test"
@@ -17,12 +23,6 @@ Rake::TestTask.new(:engine_test) do |t|
1723
t.test_files = FileList["test/test_engine/**/*_test.rb"]
1824
end
1925

20-
begin
21-
require "rspec/core/rake_task"
22-
RSpec::Core::RakeTask.new(:spec)
23-
rescue LoadError
24-
end
25-
2626
desc "Runs benchmarks against components"
2727
task :partial_benchmark do
2828
ruby "./performance/partial_benchmark.rb"
@@ -130,4 +130,18 @@ namespace :docs do
130130
end
131131
end
132132

133-
task default: [:test, :engine_test, :spec]
133+
task :all_tests do
134+
if ENV["MEASURE_COVERAGE"]
135+
SimpleCov.start do
136+
command_name "RSpec-rails#{Rails::VERSION::STRING}-ruby#{RUBY_VERSION}"
137+
138+
formatter SimpleCov::Formatter::Console
139+
end
140+
end
141+
142+
Rake::Task["test"].invoke
143+
Rake::Task["engine_test"].invoke
144+
Rake::Task["spec"].invoke
145+
end
146+
147+
task default: [:all_tests]

docs/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ nav_order: 6
1414

1515
*Joel Hawksley*
1616

17+
* Add `SystemSpecHelpers` for use with RSpec.
18+
19+
*Meyric Rawlings*, *Joel Hawksley*
20+
1721
## 4.0.0.alpha7
1822

1923
* BREAKING: Remove deprecated `use_helper(s)`. Use `include MyHelper` or `helpers.` proxy instead.

docs/guide/testing.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ RSpec.configure do |config|
4242
# ...
4343

4444
config.include ViewComponent::TestHelpers, type: :component
45+
config.include ViewComponent::SystemSpecHelpers, type: :feature
46+
config.include ViewComponent::SystemSpecHelpers, type: :system
4547
end
4648
```
4749

lib/docs/docs_builder_component.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,12 @@ def docstring
6262
@method.docstring
6363
end
6464

65+
# Not covered as we have no deprecated methods
66+
# :nocov:
6567
def deprecation_text
6668
@method.tag(:deprecated)&.text
6769
end
70+
# :nocov:
6871

6972
def docstring_and_deprecation_text
7073
<<~DOCS.strip.html_safe

lib/view_component.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module ViewComponent
1818

1919
if Rails.env.test?
2020
autoload :TestHelpers
21+
autoload :SystemSpecHelpers
2122
autoload :SystemTestHelpers
2223
autoload :TestCase
2324
autoload :SystemTestCase
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# frozen_string_literal: true
2+
3+
module ViewComponent
4+
module SystemSpecHelpers
5+
include SystemTestHelpers
6+
7+
def page
8+
Capybara.current_session
9+
end
10+
end
11+
end

spec/spec_helper.rb

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,6 @@
44
require "simplecov-console"
55
require "rails/version"
66

7-
if ENV["MEASURE_COVERAGE"]
8-
SimpleCov.start do
9-
command_name "RSpec-rails#{Rails::VERSION::STRING}-ruby#{RUBY_VERSION}"
10-
11-
formatter SimpleCov::Formatter::Console
12-
end
13-
end
14-
157
require "bundler/setup"
168

179
# Configure Rails Environment
@@ -23,6 +15,18 @@
2315
require File.expand_path("../sandbox/config/environment.rb", __FILE__)
2416
require "rspec/rails"
2517

18+
require "capybara/cuprite"
19+
20+
# Rails registers its own driver named "cuprite" which will overwrite the one we
21+
# register here. Avoid the problem by registering the driver with a distinct name.
22+
Capybara.register_driver(:system_test_driver) do |app|
23+
# Add the process_timeout option to prevent failures due to the browser
24+
# taking too long to start up.
25+
Capybara::Cuprite::Driver.new(app, {process_timeout: 60, timeout: 30})
26+
end
27+
2628
RSpec.configure do |config|
2729
config.include ViewComponent::TestHelpers
30+
config.include ViewComponent::SystemSpecHelpers, type: :feature
31+
config.include ViewComponent::SystemSpecHelpers, type: :system
2832
end

0 commit comments

Comments
 (0)