cucumber-rails 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.rspec +1 -1
- data/.travis.yml +7 -6
- data/Appraisals +48 -40
- data/CONTRIBUTING.md +2 -2
- data/History.md +50 -7
- data/README.md +22 -9
- data/cucumber-rails.gemspec +19 -15
- data/dev_tasks/yard/default/layout/html/footer.erb +1 -1
- data/dev_tasks/yard/default/layout/html/layout.erb +5 -5
- data/dev_tasks/yard/default/layout/html/logo.erb +1 -1
- data/features/choose_javascript_database_strategy.feature +1 -1
- data/features/database_cleaner.feature +1 -1
- data/features/disable_automatic_database_cleaning.feature +1 -1
- data/features/install_cucumber_rails.feature +2 -1
- data/features/raising_errors.feature +1 -1
- data/features/rerun_profile.feature +1 -1
- data/features/step_definitions/cucumber_rails_steps.rb +17 -17
- data/features/support/bundler_pre_support.rb +2 -2
- data/features/support/env.rb +4 -4
- data/features/support/legacy_web_steps_support.rb +2 -3
- data/gemfiles/capybara_1_1.gemfile +2 -3
- data/gemfiles/rails_3_0.gemfile +2 -4
- data/gemfiles/rails_3_1.gemfile +2 -3
- data/gemfiles/rails_3_2.gemfile +2 -3
- data/gemfiles/rails_4_0.gemfile +2 -4
- data/gemfiles/rails_4_1.gemfile +18 -0
- data/lib/cucumber/rails.rb +8 -7
- data/lib/cucumber/rails/action_controller.rb +2 -2
- data/lib/cucumber/rails/application.rb +1 -1
- data/lib/cucumber/rails/capybara/javascript_emulation.rb +4 -4
- data/lib/cucumber/rails/capybara/select_dates_and_times.rb +6 -6
- data/lib/cucumber/rails/database.rb +9 -12
- data/lib/cucumber/rails/hooks/active_record.rb +3 -3
- data/lib/cucumber/rails/rspec.rb +2 -2
- data/lib/cucumber/rails/world.rb +2 -2
- data/lib/generators/cucumber/install/USAGE +2 -2
- data/lib/generators/cucumber/install/install_generator.rb +9 -9
- data/lib/generators/cucumber/install/templates/support/_rails_each_run.rb.erb +2 -2
- data/lib/generators/cucumber/install/templates/support/rails_spork.rb.erb +2 -2
- data/spec/cucumber/rails/database_spec.rb +3 -3
- data/spec/generators/cucumber/install/install_generator_spec.rb +5 -5
- data/spec/spec_helper.rb +1 -0
- metadata +207 -108
- data/features/step_definitions/mongo_steps.rb +0 -3
@@ -9,5 +9,6 @@ Feature: Rails
|
|
9
9
|
| config/cucumber.yml |
|
10
10
|
| script/cucumber |
|
11
11
|
| features/support/env.rb |
|
12
|
+
| features/step_definitions/.gitkeep |
|
12
13
|
| lib/tasks/cucumber.rake |
|
13
|
-
And the file "features/support/env.rb" should contain "require 'cucumber/rails'"
|
14
|
+
And the file "features/support/env.rb" should contain "require 'cucumber/rails'"
|
@@ -1,37 +1,37 @@
|
|
1
1
|
module CucumberRailsHelper
|
2
|
-
def rails_new(options={})
|
2
|
+
def rails_new(options = {})
|
3
3
|
options[:name] ||= 'test_app'
|
4
|
-
run_simple "bundle exec rails new #{options[:name]} --skip-test-unit #{options[:args]}"
|
4
|
+
run_simple "bundle exec rails new #{options[:name]} --skip-test-unit --skip-spring #{options[:args]}"
|
5
5
|
assert_passing_with('README')
|
6
6
|
cd options[:name]
|
7
7
|
end
|
8
8
|
|
9
9
|
def install_cucumber_rails(*options)
|
10
10
|
if options.include?(:not_in_test_group)
|
11
|
-
gem
|
11
|
+
gem 'cucumber-rails', path: "#{File.expand_path('.')}"
|
12
12
|
else
|
13
|
-
gem
|
13
|
+
gem 'cucumber-rails' , group: :test, require: false, path: "#{File.expand_path('.')}"
|
14
14
|
end
|
15
|
-
gem
|
16
|
-
gem
|
17
|
-
gem
|
18
|
-
gem 'factory_girl', :
|
19
|
-
gem
|
20
|
-
run_simple
|
15
|
+
gem 'capybara', group: :test
|
16
|
+
gem 'rspec-rails', group: :test
|
17
|
+
gem 'database_cleaner', group: :test unless options.include?(:no_database_cleaner)
|
18
|
+
gem 'factory_girl', group: :test unless options.include?(:no_factory_girl)
|
19
|
+
gem 'selenium-webdriver', group: :test
|
20
|
+
run_simple 'bundle exec rails generate cucumber:install'
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
def gem(name, options)
|
24
24
|
line = %{gem "#{name}", #{options.inspect}\n}
|
25
25
|
append_to_file('Gemfile', line)
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
def prepare_aruba_report
|
29
29
|
if(ENV['ARUBA_REPORT_DIR'])
|
30
30
|
@aruba_report_start = Time.new
|
31
31
|
sleep(1)
|
32
32
|
end
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def fixture(path)
|
36
36
|
File.expand_path(File.dirname(__FILE__) + "./../support/fixtures/#{path}")
|
37
37
|
end
|
@@ -46,7 +46,7 @@ Given /^I have created a new Rails app and installed cucumber\-rails, accidental
|
|
46
46
|
end
|
47
47
|
|
48
48
|
Given /^I have created a new Rails app "([^"]*)" and installed cucumber\-rails$/ do |app_name|
|
49
|
-
rails_new :
|
49
|
+
rails_new name: app_name
|
50
50
|
install_cucumber_rails
|
51
51
|
create_web_steps
|
52
52
|
prepare_aruba_report
|
@@ -60,14 +60,14 @@ Given /^I have created a new Rails app and installed cucumber\-rails$/ do
|
|
60
60
|
end
|
61
61
|
|
62
62
|
Given /^I have created a new Rails app with no database and installed cucumber-rails$/ do
|
63
|
-
rails_new :
|
63
|
+
rails_new args: '--skip-active-record'
|
64
64
|
install_cucumber_rails :no_database_cleaner, :no_factory_girl
|
65
65
|
overwrite_file('features/support/env.rb', "require 'cucumber/rails'\n")
|
66
66
|
create_web_steps
|
67
67
|
end
|
68
68
|
|
69
69
|
Given /^I have created a new Rails app "(.*?)" with no database and installed cucumber\-rails$/ do |app_name|
|
70
|
-
rails_new :
|
70
|
+
rails_new name: app_name, args: '--skip-active-record'
|
71
71
|
install_cucumber_rails :no_database_cleaner, :no_factory_girl
|
72
72
|
overwrite_file('features/support/env.rb', "require 'cucumber/rails'\n")
|
73
73
|
create_web_steps
|
@@ -75,7 +75,7 @@ end
|
|
75
75
|
|
76
76
|
Given /^I have a "([^"]*)" ActiveRecord model object$/ do |name|
|
77
77
|
run_simple("bundle exec rails g model #{name}")
|
78
|
-
run_simple(
|
78
|
+
run_simple('bundle exec rake db:migrate RAILS_ENV=test')
|
79
79
|
end
|
80
80
|
|
81
81
|
When /^I run the cukes$/ do
|
data/features/support/env.rb
CHANGED
@@ -17,16 +17,16 @@ if(ENV['ARUBA_REPORT_DIR'])
|
|
17
17
|
module Reporting
|
18
18
|
def children(dir)
|
19
19
|
children = Dir["#{dir}/*"].sort
|
20
|
-
|
20
|
+
|
21
21
|
# include
|
22
22
|
children = children.select do |child|
|
23
|
-
File.directory?(child) ||
|
23
|
+
File.directory?(child) ||
|
24
24
|
(@aruba_report_start && File.stat(child).mtime > @aruba_report_start)
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
# exclude
|
28
28
|
children = children.reject do |child|
|
29
|
-
child =~ /Gemfile/ ||
|
29
|
+
child =~ /Gemfile/ ||
|
30
30
|
child =~ /\.log$/
|
31
31
|
end
|
32
32
|
|
@@ -235,7 +235,7 @@ Then /^(?:|I )should have the following query string:$/ do |expected_pairs|
|
|
235
235
|
query = URI.parse(current_url).query
|
236
236
|
actual_params = query ? CGI.parse(query) : {}
|
237
237
|
expected_params = {}
|
238
|
-
expected_pairs.rows_hash.each_pair{|k,v| expected_params[k] = v.split(',')}
|
238
|
+
expected_pairs.rows_hash.each_pair{|k,v| expected_params[k] = v.split(',')}
|
239
239
|
|
240
240
|
if actual_params.respond_to? :should
|
241
241
|
actual_params.should == expected_params
|
@@ -248,7 +248,7 @@ Then /^show me the page$/ do
|
|
248
248
|
save_and_open_page
|
249
249
|
end
|
250
250
|
EOF
|
251
|
-
|
251
|
+
|
252
252
|
write_file('features/support/paths.rb', <<-EOF)
|
253
253
|
module NavigationHelpers
|
254
254
|
# Maps a name to a path. Used by the
|
@@ -287,4 +287,3 @@ EOF
|
|
287
287
|
end
|
288
288
|
end
|
289
289
|
World(WebSteps)
|
290
|
-
|
@@ -5,13 +5,12 @@ source "https://rubygems.org"
|
|
5
5
|
gem "capybara", "~> 1.1.2"
|
6
6
|
gem "rails", "~> 3.2.12"
|
7
7
|
gem "turn", "~> 0.9.6"
|
8
|
-
gem "rspec-rails", "~> 2.
|
8
|
+
gem "rspec-rails", "~> 2.14.2"
|
9
9
|
gem "sass-rails", "~> 3.2.6"
|
10
10
|
gem "coffee-rails", "~> 3.2.2"
|
11
11
|
gem "jquery-rails", "~> 2.2.1"
|
12
12
|
gem "uglifier", "~> 2.1.0"
|
13
13
|
gem "sqlite3", "~> 1.3.7"
|
14
|
-
gem "bson_ext", "~> 1.8.5"
|
15
14
|
gem "database_cleaner", "~> 1.0.1"
|
16
15
|
|
17
|
-
gemspec :path=>"../"
|
16
|
+
gemspec :path => "../"
|
data/gemfiles/rails_3_0.gemfile
CHANGED
@@ -5,12 +5,10 @@ source "https://rubygems.org"
|
|
5
5
|
gem "rails", "~> 3.0.20"
|
6
6
|
gem "capybara", "~> 2.0.2"
|
7
7
|
gem "turn", "~> 0.9.6"
|
8
|
-
gem "rspec-rails", "~> 2.
|
8
|
+
gem "rspec-rails", "~> 2.14.2"
|
9
9
|
gem "jquery-rails", "~> 2.2.1"
|
10
10
|
gem "uglifier", "~> 2.1.0"
|
11
11
|
gem "sqlite3", "~> 1.3.7"
|
12
|
-
gem "bson_ext", "~> 1.8.5"
|
13
|
-
gem "mongoid", "~> 2.2.6"
|
14
12
|
gem "database_cleaner", "~> 1.0.1"
|
15
13
|
|
16
|
-
gemspec :path=>"../"
|
14
|
+
gemspec :path => "../"
|
data/gemfiles/rails_3_1.gemfile
CHANGED
@@ -5,13 +5,12 @@ source "https://rubygems.org"
|
|
5
5
|
gem "rails", "~> 3.1.11"
|
6
6
|
gem "capybara", "~> 2.0.2"
|
7
7
|
gem "turn", "~> 0.9.6"
|
8
|
-
gem "rspec-rails", "~> 2.
|
8
|
+
gem "rspec-rails", "~> 2.14.2"
|
9
9
|
gem "sass-rails", "~> 3.1.7"
|
10
10
|
gem "coffee-rails", "~> 3.1.1"
|
11
11
|
gem "jquery-rails", "~> 2.2.1"
|
12
12
|
gem "uglifier", "~> 2.1.0"
|
13
13
|
gem "sqlite3", "~> 1.3.7"
|
14
|
-
gem "bson_ext", "~> 1.8.5"
|
15
14
|
gem "database_cleaner", "~> 1.0.1"
|
16
15
|
|
17
|
-
gemspec :path=>"../"
|
16
|
+
gemspec :path => "../"
|
data/gemfiles/rails_3_2.gemfile
CHANGED
@@ -5,13 +5,12 @@ source "https://rubygems.org"
|
|
5
5
|
gem "rails", "~> 3.2.12"
|
6
6
|
gem "capybara", "~> 2.0.2"
|
7
7
|
gem "turn", "~> 0.9.6"
|
8
|
-
gem "rspec-rails", "~> 2.
|
8
|
+
gem "rspec-rails", "~> 2.14.2"
|
9
9
|
gem "sass-rails", "~> 3.2.6"
|
10
10
|
gem "coffee-rails", "~> 3.2.2"
|
11
11
|
gem "jquery-rails", "~> 2.2.1"
|
12
12
|
gem "uglifier", "~> 2.1.0"
|
13
13
|
gem "sqlite3", "~> 1.3.7"
|
14
|
-
gem "bson_ext", "~> 1.8.5"
|
15
14
|
gem "database_cleaner", "~> 1.0.1"
|
16
15
|
|
17
|
-
gemspec :path=>"../"
|
16
|
+
gemspec :path => "../"
|
data/gemfiles/rails_4_0.gemfile
CHANGED
@@ -7,14 +7,12 @@ gem "rails", "~> 4.0.0"
|
|
7
7
|
gem "railties", "~> 4.0.0"
|
8
8
|
gem "capybara", "~> 2.0.2"
|
9
9
|
gem "turn", "~> 0.9.6"
|
10
|
-
gem "rspec-rails", "~> 2.
|
10
|
+
gem "rspec-rails", "~> 2.14.2"
|
11
11
|
gem "sass-rails", "~> 4.0.0"
|
12
12
|
gem "coffee-rails", "~> 4.0.0"
|
13
13
|
gem "jquery-rails", "~> 2.2.1"
|
14
14
|
gem "uglifier", "~> 2.1.0"
|
15
15
|
gem "sqlite3", "~> 1.3.7"
|
16
|
-
gem "bson_ext", "~> 1.8.5"
|
17
|
-
gem "mongoid", :git=>"https://github.com/mongoid/mongoid.git"
|
18
16
|
gem "database_cleaner", "~> 1.0.1"
|
19
17
|
|
20
|
-
gemspec :path=>"../"
|
18
|
+
gemspec :path => "../"
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "protected_attributes", "~> 1.0.3"
|
6
|
+
gem "rails", "~> 4.1.0"
|
7
|
+
gem "railties", "~> 4.1.0"
|
8
|
+
gem "capybara", "~> 2.0.2"
|
9
|
+
gem "turn", "~> 0.9.6"
|
10
|
+
gem "rspec-rails", "~> 2.14.2"
|
11
|
+
gem "sass-rails", "~> 4.0.0"
|
12
|
+
gem "coffee-rails", "~> 4.0.0"
|
13
|
+
gem "jquery-rails", "~> 2.2.1"
|
14
|
+
gem "uglifier", "~> 2.1.0"
|
15
|
+
gem "sqlite3", "~> 1.3.7"
|
16
|
+
gem "database_cleaner", "~> 1.0.1"
|
17
|
+
|
18
|
+
gemspec :path => "../"
|
data/lib/cucumber/rails.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
env_caller = File.dirname(caller.detect{|f| f =~ /\/env\.rb:/}) if caller.detect{|f| f =~ /\/env\.rb:/}
|
1
|
+
env_caller = File.dirname(caller.detect{ |f| f =~ /\/env\.rb:/ }) if caller.detect{ |f| f =~ /\/env\.rb:/ }
|
2
2
|
if env_caller
|
3
3
|
require 'rails'
|
4
4
|
require 'cucumber/rails/application'
|
5
|
-
ENV[
|
6
|
-
ENV[
|
7
|
-
require File.expand_path(ENV[
|
5
|
+
ENV['RAILS_ENV'] ||= 'test'
|
6
|
+
ENV['RAILS_ROOT'] ||= File.expand_path(env_caller + '/../..')
|
7
|
+
require File.expand_path(ENV['RAILS_ROOT'] + '/config/environment')
|
8
8
|
require 'cucumber/rails/action_controller'
|
9
9
|
|
10
10
|
if defined?(ActiveRecord::Base)
|
@@ -14,8 +14,8 @@ if env_caller
|
|
14
14
|
require 'action_dispatch/testing/integration'
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
warn "WARNING: You have set Rails' config.cache_classes to false (most likely in config/environments/cucumber.rb). This setting is known to cause problems with database transactions. Set config.cache_classes to true if you want to use transactions.
|
17
|
+
unless Rails.application.config.cache_classes
|
18
|
+
warn "WARNING: You have set Rails' config.cache_classes to false (most likely in config/environments/cucumber.rb). This setting is known to cause problems with database transactions. Set config.cache_classes to true if you want to use transactions."
|
19
19
|
end
|
20
20
|
|
21
21
|
require 'cucumber/rails/world'
|
@@ -23,8 +23,9 @@ if env_caller
|
|
23
23
|
require 'cucumber/rails/capybara'
|
24
24
|
require 'cucumber/rails/database'
|
25
25
|
|
26
|
+
MultiTest.disable_autorun
|
26
27
|
else
|
27
28
|
warn "WARNING: Cucumber-rails required outside of env.rb. The rest of loading is being deferred until env.rb is called.
|
28
|
-
To avoid this warning, move 'gem \'cucumber-rails\', :require => false' under only group :test in your Gemfile.
|
29
|
+
To avoid this warning, move 'gem \'cucumber-rails\', :require => false' under only group :test in your Gemfile.
|
29
30
|
If already in the :test group, be sure you are specifying ':require => false'."
|
30
31
|
end
|
@@ -8,7 +8,7 @@ module Cucumber
|
|
8
8
|
alias_method :click, :click_with_javascript_emulation
|
9
9
|
end
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def click_with_javascript_emulation
|
13
13
|
if link_with_non_get_http_method?
|
14
14
|
::Capybara::RackTest::Form.new(driver, js_form(element_node.document, self[:href], emulated_method)).submit(self)
|
@@ -54,14 +54,14 @@ module Cucumber
|
|
54
54
|
|
55
55
|
# rails will wipe the session if the CSRF token is not sent
|
56
56
|
# with non-GET requests
|
57
|
-
if csrf? && emulated_method.downcase !=
|
57
|
+
if csrf? && emulated_method.downcase != 'get'
|
58
58
|
input = document.create_element('input')
|
59
59
|
input['type'] = 'hidden'
|
60
60
|
input['name'] = csrf_param
|
61
61
|
input['value'] = csrf_token
|
62
62
|
js_form.add_child(input)
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
js_form
|
66
66
|
end
|
67
67
|
|
@@ -85,7 +85,7 @@ module Cucumber
|
|
85
85
|
if self.respond_to? :native
|
86
86
|
self.native
|
87
87
|
else
|
88
|
-
warn
|
88
|
+
warn 'DEPRECATED: cucumber-rails loves you, just not your version of Capybara. Please update Capybara to >= 0.4.0'
|
89
89
|
self.node
|
90
90
|
end
|
91
91
|
end
|
@@ -3,17 +3,17 @@ module Cucumber
|
|
3
3
|
module Capybara
|
4
4
|
# This module defines methods for selecting dates and times
|
5
5
|
module SelectDatesAndTimes
|
6
|
-
# Select a Rails date. Options
|
6
|
+
# Select a Rails date. Options hash must include :from => +label+
|
7
7
|
def select_date(date, options)
|
8
8
|
date = Date.parse(date)
|
9
9
|
base_dom_id = get_base_dom_id_from_label_tag(options[:from])
|
10
10
|
|
11
11
|
find(:xpath, ".//select[@id='#{base_dom_id}_1i']").select(date.year.to_s)
|
12
|
-
find(:xpath, ".//select[@id='#{base_dom_id}_2i']").select(I18n.l date, :
|
12
|
+
find(:xpath, ".//select[@id='#{base_dom_id}_2i']").select(I18n.l date, format: '%B')
|
13
13
|
find(:xpath, ".//select[@id='#{base_dom_id}_3i']").select(date.day.to_s)
|
14
14
|
end
|
15
|
-
|
16
|
-
# Select a Rails time. Options
|
15
|
+
|
16
|
+
# Select a Rails time. Options hash must include :from => +label+
|
17
17
|
def select_time(time, options)
|
18
18
|
time = Time.zone.parse(time)
|
19
19
|
base_dom_id = get_base_dom_id_from_label_tag(options[:from])
|
@@ -21,8 +21,8 @@ module Cucumber
|
|
21
21
|
find(:xpath, ".//select[@id='#{base_dom_id}_4i']").select(time.hour.to_s.rjust(2, '0'))
|
22
22
|
find(:xpath, ".//select[@id='#{base_dom_id}_5i']").select(time.min.to_s.rjust(2, '0'))
|
23
23
|
end
|
24
|
-
|
25
|
-
# Select a Rails datetime. Options
|
24
|
+
|
25
|
+
# Select a Rails datetime. Options hash must include :from => +label+
|
26
26
|
def select_datetime(datetime, options)
|
27
27
|
select_date(datetime, options)
|
28
28
|
select_time(datetime, options)
|
@@ -1,13 +1,11 @@
|
|
1
1
|
module Cucumber
|
2
2
|
module Rails
|
3
3
|
module Database
|
4
|
-
|
5
4
|
CUSTOM_STRATEGY_INTERFACE = %w{ before_js before_non_js }
|
6
5
|
|
7
|
-
class InvalidStrategy < ArgumentError;end
|
6
|
+
class InvalidStrategy < ArgumentError; end
|
8
7
|
|
9
8
|
class << self
|
10
|
-
|
11
9
|
attr_accessor :autorun_database_cleaner
|
12
10
|
|
13
11
|
def javascript_strategy=(args)
|
@@ -41,24 +39,23 @@ module Cucumber
|
|
41
39
|
|
42
40
|
def map
|
43
41
|
{
|
44
|
-
:
|
45
|
-
:
|
46
|
-
:
|
47
|
-
:
|
42
|
+
truncation: TruncationStrategy,
|
43
|
+
shared_connection: SharedConnectionStrategy,
|
44
|
+
transaction: SharedConnectionStrategy,
|
45
|
+
deletion: DeletionStrategy
|
48
46
|
}
|
49
47
|
end
|
50
48
|
|
51
49
|
def validate_interface!
|
52
|
-
unless CUSTOM_STRATEGY_INTERFACE.all? {|m| @strategy.respond_to?(m) }
|
53
|
-
raise(ArgumentError, "Strategy must respond to all of: #{CUSTOM_STRATEGY_INTERFACE.map{|method| "##{method}" } * ' '} !")
|
50
|
+
unless CUSTOM_STRATEGY_INTERFACE.all? { |m| @strategy.respond_to?(m) }
|
51
|
+
raise(ArgumentError, "Strategy must respond to all of: #{CUSTOM_STRATEGY_INTERFACE.map{ |method| "##{method}" } * ' ' } !")
|
54
52
|
end
|
55
53
|
end
|
56
|
-
|
57
54
|
end
|
58
55
|
|
59
56
|
class Strategy
|
60
|
-
def initialize(options={})
|
61
|
-
@options=options
|
57
|
+
def initialize(options = {})
|
58
|
+
@options = options
|
62
59
|
end
|
63
60
|
|
64
61
|
def before_js(strategy)
|