cucumber-rails 1.4.0 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|