cucumber-rails 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.rubocop.yml +35 -0
- data/.rubocop_todo.yml +14 -398
- data/.travis.yml +23 -8
- data/Appraisals +26 -23
- data/CHANGELOG.md +70 -15
- data/CONTRIBUTING.md +4 -14
- data/Gemfile +2 -4
- data/README.md +4 -7
- data/Rakefile +17 -13
- data/bin/install_geckodriver.sh +1 -1
- data/cucumber-rails.gemspec +24 -24
- data/dev_tasks/cucumber.rake +2 -0
- data/dev_tasks/rspec.rake +2 -0
- data/dev_tasks/yard.rake +6 -5
- data/dev_tasks/yard/default/layout/html/setup.rb +6 -1
- data/features/allow_rescue.feature +11 -11
- data/features/annotations.feature +2 -2
- data/features/capybara_javascript_drivers.feature +11 -22
- data/features/choose_javascript_database_strategy.feature +36 -56
- data/features/database_cleaner.feature +12 -12
- data/features/disable_automatic_database_cleaning.feature +10 -16
- data/features/emulate_javascript.feature +16 -16
- data/features/no_database.feature +5 -6
- data/features/raising_errors.feature +2 -2
- data/features/rerun_profile.feature +4 -4
- data/features/rest_api.feature +10 -10
- data/features/step_definitions/cucumber_rails_steps.rb +20 -101
- data/features/support/aruba.rb +2 -0
- data/features/support/cucumber_rails_helper.rb +80 -0
- data/features/support/env.rb +4 -30
- data/features/support/legacy_web_steps_support.rb +1 -1
- data/gemfiles/rails_4_2.gemfile +4 -4
- data/gemfiles/rails_5_0.gemfile +4 -4
- data/gemfiles/rails_5_1.gemfile +3 -3
- data/gemfiles/rails_5_2.gemfile +4 -4
- data/gemfiles/rails_6_0.gemfile +3 -2
- data/lib/cucumber/rails.rb +14 -6
- data/lib/cucumber/rails/action_controller.rb +10 -6
- data/lib/cucumber/rails/application.rb +13 -7
- data/lib/cucumber/rails/capybara.rb +2 -0
- data/lib/cucumber/rails/capybara/javascript_emulation.rb +17 -7
- data/lib/cucumber/rails/capybara/select_dates_and_times.rb +3 -1
- data/lib/cucumber/rails/database.rb +25 -7
- data/lib/cucumber/rails/hooks.rb +2 -0
- data/lib/cucumber/rails/hooks/active_record.rb +8 -4
- data/lib/cucumber/rails/hooks/allow_rescue.rb +2 -0
- data/lib/cucumber/rails/hooks/database_cleaner.rb +4 -2
- data/lib/cucumber/rails/hooks/mail.rb +2 -0
- data/lib/cucumber/rails/rspec.rb +3 -1
- data/lib/cucumber/rails/world.rb +12 -6
- data/lib/generators/cucumber/{install/USAGE → USAGE} +0 -0
- data/lib/generators/cucumber/{install/install_generator.rb → install_generator.rb} +18 -9
- data/lib/generators/cucumber/{install/templates → templates}/config/cucumber.yml.erb +0 -0
- data/lib/generators/cucumber/{install/templates → templates}/script/cucumber +1 -0
- data/lib/generators/cucumber/{install/templates → templates}/support/_rails_each_run.rb.erb +0 -0
- data/lib/generators/cucumber/{install/templates → templates}/support/_rails_prefork.rb.erb +0 -0
- data/lib/generators/cucumber/{install/templates → templates}/support/capybara.rb +2 -0
- data/lib/generators/cucumber/{install/templates → templates}/support/edit_warning.txt +0 -0
- data/lib/generators/cucumber/{install/templates → templates}/support/rails.rb.erb +0 -0
- data/lib/generators/cucumber/{install/templates → templates}/support/rails_spork.rb.erb +0 -0
- data/lib/generators/cucumber/{install/templates → templates}/tasks/cucumber.rake.erb +0 -0
- data/spec/cucumber/rails/database_spec.rb +20 -16
- data/spec/generators/cucumber/{install/install_generator_spec.rb → install_generator_spec.rb} +16 -6
- data/spec/spec_helper.rb +4 -2
- metadata +99 -96
- data/features/support/bundler_pre_support.rb +0 -28
- data/features/support/fixtures/bundler-1.0.21.gem +0 -0
- data/features/support/fixtures/bundler-1.1.rc.gem +0 -0
@@ -3,7 +3,7 @@ Feature: Emulate Javascript
|
|
3
3
|
Scenario: See a widget
|
4
4
|
Given I have created a new Rails app and installed cucumber-rails
|
5
5
|
And I force selenium to run Firefox in headless mode
|
6
|
-
|
6
|
+
When I run `rails generate scaffold widget name:string`
|
7
7
|
And I write to "features/f.feature" with:
|
8
8
|
"""
|
9
9
|
@javascript
|
@@ -15,7 +15,7 @@ Feature: Emulate Javascript
|
|
15
15
|
"""
|
16
16
|
And I write to "features/step_definitions/s.rb" with:
|
17
17
|
"""
|
18
|
-
Given
|
18
|
+
Given('there is a widget named {string}') do |name|
|
19
19
|
FactoryBot.create(:widget, name: name)
|
20
20
|
end
|
21
21
|
"""
|
@@ -27,17 +27,17 @@ Feature: Emulate Javascript
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
"""
|
30
|
-
|
30
|
+
And I run `bundle exec rake db:migrate`
|
31
31
|
And I run `bundle exec rake cucumber`
|
32
32
|
Then the feature run should pass with:
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
"""
|
34
|
+
1 scenario (1 passed)
|
35
|
+
3 steps (3 passed)
|
36
|
+
"""
|
37
37
|
|
38
38
|
Scenario: Pass on the CSRF token
|
39
39
|
Given I have created a new Rails app and installed cucumber-rails
|
40
|
-
|
40
|
+
When I run `rails generate scaffold widget name:string`
|
41
41
|
And I run `sed -i -e 's/forgery_protection *= false/forgery_protection = true/' config/environments/test.rb`
|
42
42
|
And I run `rails generate controller session establish`
|
43
43
|
And I write to "app/controllers/session_controller.rb" with:
|
@@ -52,8 +52,9 @@ Feature: Emulate Javascript
|
|
52
52
|
"""
|
53
53
|
class ApplicationController < ActionController::Base
|
54
54
|
protect_from_forgery
|
55
|
+
|
55
56
|
before_action except: :establish do
|
56
|
-
render text:
|
57
|
+
render text: 'denied', status: :forbidden and return false unless session[:verified]
|
57
58
|
end
|
58
59
|
end
|
59
60
|
"""
|
@@ -72,7 +73,7 @@ Feature: Emulate Javascript
|
|
72
73
|
"""
|
73
74
|
And I write to "features/step_definitions/s.rb" with:
|
74
75
|
"""
|
75
|
-
Given
|
76
|
+
Given('there is a widget named {string}') do |name|
|
76
77
|
FactoryBot.create(:widget, name: name)
|
77
78
|
end
|
78
79
|
"""
|
@@ -84,11 +85,10 @@ Feature: Emulate Javascript
|
|
84
85
|
end
|
85
86
|
end
|
86
87
|
"""
|
87
|
-
|
88
|
+
And I run `bundle exec rake db:migrate`
|
88
89
|
And I run `bundle exec rake cucumber`
|
89
90
|
Then the feature run should pass with:
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
91
|
+
"""
|
92
|
+
1 scenario (1 passed)
|
93
|
+
8 steps (8 passed)
|
94
|
+
"""
|
@@ -1,11 +1,10 @@
|
|
1
1
|
Feature: No Database
|
2
2
|
Allow Cucumber to work with a Rails app without a database
|
3
3
|
|
4
|
-
@fails-on-travis
|
5
4
|
Scenario: No ActiveRecord and DatabaseCleaner
|
6
5
|
Given I have created a new Rails app with no database and installed cucumber-rails
|
7
6
|
# Turn off ActiveRecord
|
8
|
-
|
7
|
+
When I write to "config/application.rb" with:
|
9
8
|
"""
|
10
9
|
require File.expand_path('../boot', __FILE__)
|
11
10
|
|
@@ -17,7 +16,7 @@ Feature: No Database
|
|
17
16
|
|
18
17
|
module TestApp
|
19
18
|
class Application < Rails::Application
|
20
|
-
config.encoding =
|
19
|
+
config.encoding = 'utf-8'
|
21
20
|
config.filter_parameters += [:password]
|
22
21
|
end
|
23
22
|
end
|
@@ -32,7 +31,7 @@ Feature: No Database
|
|
32
31
|
"""
|
33
32
|
class PostsController < ApplicationController
|
34
33
|
def index
|
35
|
-
raise
|
34
|
+
raise 'There is an error in index'
|
36
35
|
end
|
37
36
|
end
|
38
37
|
"""
|
@@ -46,11 +45,11 @@ Feature: No Database
|
|
46
45
|
"""
|
47
46
|
Feature: posts
|
48
47
|
Scenario: See them
|
49
|
-
When I
|
48
|
+
When I view the posts
|
50
49
|
"""
|
51
50
|
And I write to "features/step_definitions/posts_steps.rb" with:
|
52
51
|
"""
|
53
|
-
When
|
52
|
+
When('I view the posts') do
|
54
53
|
visit '/posts'
|
55
54
|
end
|
56
55
|
"""
|
@@ -1,8 +1,8 @@
|
|
1
1
|
Feature: Raise Errors
|
2
2
|
|
3
3
|
Scenario: Raise error for undefined route
|
4
|
-
Given I have created a new Rails app
|
5
|
-
|
4
|
+
Given I have created a new Rails app with no database and installed cucumber-rails
|
5
|
+
When I write to "features/tests.feature" with:
|
6
6
|
"""
|
7
7
|
Feature: Tests
|
8
8
|
Scenario: Tests
|
@@ -24,15 +24,15 @@ Feature: Rerun profile
|
|
24
24
|
"""
|
25
25
|
And a file named "features/step_definitions/rerun_steps.rb" with:
|
26
26
|
"""
|
27
|
-
Given
|
28
|
-
puts
|
27
|
+
Given('fixed now') do
|
28
|
+
puts 'All fixed now'
|
29
29
|
end
|
30
30
|
|
31
|
-
Given
|
31
|
+
Given('broken') do
|
32
32
|
raise "I'm broken"
|
33
33
|
end
|
34
34
|
|
35
|
-
Given
|
35
|
+
Given('passing') do
|
36
36
|
puts "I've always been passing"
|
37
37
|
end
|
38
38
|
"""
|
data/features/rest_api.feature
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
Feature: REST API
|
2
2
|
|
3
3
|
Scenario: Compare JSON
|
4
|
-
Given I have created a new Rails app
|
5
|
-
|
4
|
+
Given I have created a new Rails app and installed cucumber-rails
|
5
|
+
When I write to "app/controllers/posts_controller.rb" with:
|
6
6
|
"""
|
7
7
|
class PostsController < ApplicationController
|
8
8
|
def index
|
@@ -12,7 +12,7 @@ Feature: REST API
|
|
12
12
|
"""
|
13
13
|
And I write to "config/routes.rb" with:
|
14
14
|
"""
|
15
|
-
|
15
|
+
TestApp::Application.routes.draw do
|
16
16
|
resources :posts
|
17
17
|
end
|
18
18
|
"""
|
@@ -30,18 +30,18 @@ Feature: REST API
|
|
30
30
|
"""
|
31
31
|
And I write to "features/step_definitions/rest_steps.rb" with:
|
32
32
|
"""
|
33
|
-
When
|
33
|
+
When('the client requests GET /{word}') do |path|
|
34
34
|
get(path)
|
35
35
|
end
|
36
36
|
|
37
|
-
Then
|
38
|
-
JSON.parse(last_response.body).
|
37
|
+
Then(/^the response should be JSON:$/) do |json|
|
38
|
+
expect(JSON.parse(last_response.body)).to eq(JSON.parse(json))
|
39
39
|
end
|
40
40
|
"""
|
41
41
|
And I run `bundle exec rake db:migrate`
|
42
42
|
And I run `bundle exec rake cucumber`
|
43
43
|
Then the feature run should pass with:
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
44
|
+
"""
|
45
|
+
1 scenario (1 passed)
|
46
|
+
2 steps (2 passed)
|
47
|
+
"""
|
@@ -1,124 +1,43 @@
|
|
1
|
-
|
2
|
-
def rails_new(options = {})
|
3
|
-
options[:name] ||= 'test_app'
|
4
|
-
command = run "bundle exec rails new #{options[:name]} --skip-bundle --skip-test-unit --skip-spring #{options[:args]}"
|
5
|
-
expect(command).to have_output /README/
|
6
|
-
expect(last_command_started).to be_successfully_executed
|
7
|
-
cd options[:name]
|
8
|
-
delete_environment_variable 'RUBYOPT'
|
9
|
-
delete_environment_variable 'BUNDLE_BIN_PATH'
|
10
|
-
delete_environment_variable 'BUNDLE_GEMFILE'
|
11
|
-
end
|
12
|
-
|
13
|
-
def install_cucumber_rails(*options)
|
14
|
-
if options.include?(:not_in_test_group)
|
15
|
-
gem 'cucumber-rails', path: "#{File.expand_path('.')}"
|
16
|
-
else
|
17
|
-
gem 'cucumber-rails' , group: :test, require: false, path: "#{File.expand_path('.')}"
|
18
|
-
end
|
19
|
-
|
20
|
-
gem 'sqlite3', '~> 1.3.13'
|
21
|
-
if RUBY_VERSION < '2.4.0'
|
22
|
-
gem 'capybara', '< 3.16.0', group: :test
|
23
|
-
else
|
24
|
-
gem 'capybara', group: :test
|
25
|
-
end
|
26
|
-
gem 'selenium-webdriver', '~> 3.11', group: :test
|
27
|
-
|
28
|
-
gem 'rspec-expectations', '~> 3.7', group: :test
|
29
|
-
gem 'database_cleaner', '>= 1.1', group: :test unless options.include?(:no_database_cleaner)
|
30
|
-
gem 'factory_bot', '>= 3.2', group: :test unless options.include?(:no_factory_bot)
|
31
|
-
run_simple 'bundle install'
|
32
|
-
|
33
|
-
if `bundle exec rails -v`.split("\n").last.strip =~ /\ARails 6\./
|
34
|
-
run_simple 'bundle exec rails webpacker:install'
|
35
|
-
end
|
36
|
-
|
37
|
-
run_simple 'bundle exec rails generate cucumber:install'
|
38
|
-
end
|
39
|
-
|
40
|
-
def gem(name, *args)
|
41
|
-
options = args.last.is_a?(Hash) ? args.pop : {}
|
42
|
-
|
43
|
-
parts = ["'#{name}'"]
|
44
|
-
parts << args.map(&:inspect) if args.any?
|
45
|
-
parts << options.inspect[1..-2] if options.any?
|
46
|
-
|
47
|
-
line = "gem #{parts.join(', ')}\n"
|
48
|
-
|
49
|
-
gem_regexp = /gem ["']#{name}["'].*$/
|
50
|
-
gemfile_content = File.read(expand_path('Gemfile'))
|
51
|
-
|
52
|
-
if gemfile_content =~ gem_regexp
|
53
|
-
gemfile_content.gsub!(gem_regexp, line)
|
54
|
-
overwrite_file('Gemfile', gemfile_content)
|
55
|
-
else
|
56
|
-
append_to_file('Gemfile', line)
|
57
|
-
end
|
58
|
-
end
|
1
|
+
# frozen_string_literal: true
|
59
2
|
|
60
|
-
|
61
|
-
if(ENV['ARUBA_REPORT_DIR'])
|
62
|
-
@aruba_report_start = Time.new
|
63
|
-
sleep(1)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def fixture(path)
|
68
|
-
File.expand_path(File.dirname(__FILE__) + "./../support/fixtures/#{path}")
|
69
|
-
end
|
70
|
-
end
|
71
|
-
World(CucumberRailsHelper)
|
72
|
-
|
73
|
-
Given /^I have created a new Rails app and installed cucumber\-rails, accidentally outside of the test group in my Gemfile$/ do
|
3
|
+
Given('I have created a new Rails app and installed cucumber-rails, accidentally outside of the test group in my Gemfile') do
|
74
4
|
rails_new
|
75
5
|
install_cucumber_rails :not_in_test_group
|
76
6
|
create_web_steps
|
77
|
-
prepare_aruba_report
|
78
|
-
end
|
79
|
-
|
80
|
-
Given /^I have created a new Rails app "([^"]*)" and installed cucumber\-rails$/ do |app_name|
|
81
|
-
rails_new name: app_name
|
82
|
-
install_cucumber_rails
|
83
|
-
create_web_steps
|
84
|
-
prepare_aruba_report
|
85
7
|
end
|
86
8
|
|
87
|
-
Given
|
9
|
+
Given('I have created a new Rails app and installed cucumber-rails') do
|
88
10
|
rails_new
|
89
11
|
install_cucumber_rails
|
90
12
|
create_web_steps
|
91
|
-
prepare_aruba_report
|
92
13
|
end
|
93
14
|
|
94
|
-
Given
|
15
|
+
Given('I have created a new Rails app with no database and installed cucumber-rails') do
|
95
16
|
rails_new args: '--skip-active-record'
|
96
17
|
install_cucumber_rails :no_database_cleaner, :no_factory_bot
|
97
18
|
overwrite_file('features/support/env.rb', "require 'cucumber/rails'\n")
|
98
19
|
create_web_steps
|
99
20
|
end
|
100
21
|
|
101
|
-
Given
|
102
|
-
|
103
|
-
|
104
|
-
overwrite_file('features/support/env.rb', "require 'cucumber/rails'\n")
|
105
|
-
create_web_steps
|
106
|
-
end
|
107
|
-
|
108
|
-
Given /^I have a "([^"]*)" ActiveRecord model object$/ do |name|
|
109
|
-
run_simple("bundle exec rails g model #{name}")
|
110
|
-
run_simple('bundle exec rake db:migrate RAILS_ENV=test')
|
22
|
+
Given('I have a {string} ActiveRecord model object') do |name|
|
23
|
+
run_command_and_stop("bundle exec rails g model #{name}")
|
24
|
+
run_command_and_stop('bundle exec rake db:migrate RAILS_ENV=test')
|
111
25
|
end
|
112
26
|
|
113
|
-
Given
|
27
|
+
Given('I force selenium to run Firefox in headless mode') do
|
114
28
|
selenium_config = %{
|
115
29
|
Capybara.register_driver :selenium do |app|
|
116
30
|
http_client = Selenium::WebDriver::Remote::Http::Default.new
|
117
31
|
http_client.read_timeout = 180
|
118
32
|
|
119
|
-
browser_options =
|
33
|
+
browser_options = Selenium::WebDriver::Firefox::Options.new
|
120
34
|
browser_options.args << '--headless'
|
121
|
-
Capybara::Selenium::Driver.new(
|
35
|
+
Capybara::Selenium::Driver.new(
|
36
|
+
app,
|
37
|
+
browser: :firefox,
|
38
|
+
options: browser_options,
|
39
|
+
http_client: http_client
|
40
|
+
)
|
122
41
|
end
|
123
42
|
|
124
43
|
Capybara.server = :webrick
|
@@ -127,25 +46,25 @@ Given /^I force selenium to run Firefox in headless mode$/ do
|
|
127
46
|
step 'I append to "features/support/env.rb" with:', selenium_config
|
128
47
|
end
|
129
48
|
|
130
|
-
When
|
131
|
-
|
49
|
+
When('I run the cukes') do
|
50
|
+
run_command_and_stop('bundle exec cucumber')
|
132
51
|
end
|
133
52
|
|
134
53
|
# Copied from Aruba
|
135
|
-
Then
|
54
|
+
Then(/^the feature run should pass with:$/) do |string|
|
136
55
|
step 'the output should not contain " failed)"'
|
137
56
|
step 'the output should not contain " undefined)"'
|
138
57
|
step 'the exit status should be 0'
|
139
58
|
step 'the output should contain:', string
|
140
59
|
end
|
141
60
|
|
142
|
-
Given(
|
61
|
+
Given('I remove the {string} gem from the Gemfile') do |gem_name|
|
143
62
|
content = File.open(expand_path('Gemfile'), 'r').readlines
|
144
63
|
new_content = []
|
145
64
|
|
146
65
|
content.each do |line|
|
147
66
|
next if line =~ /gem ["|']#{gem_name}["|'].*/
|
148
|
-
|
67
|
+
|
149
68
|
new_content << line
|
150
69
|
end
|
151
70
|
|
data/features/support/aruba.rb
CHANGED
@@ -0,0 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CucumberRailsHelper
|
4
|
+
def rails_new(options = {})
|
5
|
+
options[:name] ||= 'test_app'
|
6
|
+
command_result =
|
7
|
+
run_command "bundle exec rails new #{options[:name]} --skip-bundle --skip-test-unit --skip-spring --skip-bootsnap #{options[:args]}"
|
8
|
+
expect(command_result).to have_output(/README/)
|
9
|
+
expect(last_command_started).to be_successfully_executed
|
10
|
+
cd options[:name]
|
11
|
+
delete_environment_variable 'RUBYOPT'
|
12
|
+
delete_environment_variable 'BUNDLE_BIN_PATH'
|
13
|
+
delete_environment_variable 'BUNDLE_GEMFILE'
|
14
|
+
end
|
15
|
+
|
16
|
+
def install_cucumber_rails(*options)
|
17
|
+
add_conditional_gems(options)
|
18
|
+
|
19
|
+
gem 'selenium-webdriver', '~> 3.11', group: :test
|
20
|
+
gem 'rspec-expectations', '~> 3.7', group: :test
|
21
|
+
gem 'database_cleaner', '>= 1.1', group: :test unless options.include?(:no_database_cleaner)
|
22
|
+
gem 'factory_bot', '>= 3.2', group: :test unless options.include?(:no_factory_bot)
|
23
|
+
|
24
|
+
run_command_and_stop 'bundle install'
|
25
|
+
run_command_and_stop 'bundle exec rails webpacker:install' if rails6?
|
26
|
+
run_command_and_stop 'bundle exec rails generate cucumber:install'
|
27
|
+
end
|
28
|
+
|
29
|
+
def gem(name, *args)
|
30
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
31
|
+
|
32
|
+
parts = ["'#{name}'"]
|
33
|
+
parts << args.map(&:inspect) if args.any?
|
34
|
+
parts << options.inspect[1..-2] if options.any?
|
35
|
+
|
36
|
+
line = "gem #{parts.join(', ')}\n"
|
37
|
+
|
38
|
+
gem_regexp = /gem ["']#{name}["'].*$/
|
39
|
+
gemfile_content = File.read(expand_path('Gemfile'))
|
40
|
+
|
41
|
+
if gemfile_content =~ gem_regexp
|
42
|
+
gemfile_content.gsub!(gem_regexp, line)
|
43
|
+
overwrite_file('Gemfile', gemfile_content)
|
44
|
+
else
|
45
|
+
append_to_file('Gemfile', line)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def fixture(path)
|
50
|
+
File.expand_path(File.dirname(__FILE__) + "./../support/fixtures/#{path}")
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def rails6?
|
56
|
+
`bundle exec rails -v`.start_with?('Rails 6')
|
57
|
+
end
|
58
|
+
|
59
|
+
def add_conditional_gems(options)
|
60
|
+
if options.include?(:not_in_test_group)
|
61
|
+
gem 'cucumber-rails', path: File.expand_path('.').to_s
|
62
|
+
else
|
63
|
+
gem 'cucumber-rails', group: :test, require: false, path: File.expand_path('.').to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
if rails6?
|
67
|
+
gem 'sqlite3', '~> 1.4'
|
68
|
+
else
|
69
|
+
gem 'sqlite3', '~> 1.3.13'
|
70
|
+
end
|
71
|
+
|
72
|
+
if RUBY_VERSION < '2.4.0'
|
73
|
+
gem 'capybara', '< 3.16.0', group: :test
|
74
|
+
else
|
75
|
+
gem 'capybara', group: :test
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
World(CucumberRailsHelper)
|