cucumber-rails 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/History.md +8 -1
- data/Rakefile +4 -2
- data/cucumber-rails.gemspec +17 -17
- data/features/allow_rescue.feature +1 -1
- data/features/capybara_javascript_drivers.feature +1 -1
- data/features/choose_javascript_database_strategy.feature +63 -0
- data/features/database_cleaner.feature +1 -1
- data/features/emulate_javascript.feature +2 -2
- data/features/field_with_errors.feature +2 -2
- data/features/fixing_bundler_pre.feature +1 -1
- data/features/inspect_query_string.feature +1 -1
- data/features/install_cucumber_rails.feature +1 -1
- data/features/multiple_databases.feature +1 -1
- data/features/no_database.feature +1 -1
- data/features/rerun_profile.feature +1 -1
- data/features/rest_api.feature +1 -1
- data/features/routing.feature +1 -1
- data/features/step_definitions/cucumber_rails_steps.rb +52 -398
- data/features/support/bundler_pre_support.rb +28 -0
- data/features/support/env.rb +1 -4
- data/features/support/fixtures/bundler-1.0.21.gem +0 -0
- data/features/support/fixtures/bundler-1.1.rc.gem +0 -0
- data/{lib/generators/cucumber/install/templates/step_definitions/web_steps.rb.erb → features/support/legacy_web_steps_support.rb} +69 -14
- data/lib/cucumber/rails.rb +1 -1
- data/lib/cucumber/rails/database.rb +67 -0
- data/lib/cucumber/rails/hooks/active_record.rb +2 -12
- data/lib/generators/cucumber/install/USAGE +0 -3
- data/lib/generators/cucumber/install/templates/support/_rails_each_run.rb.erb +6 -1
- metadata +79 -88
- data/Gemfile.lock +0 -202
- data/features/test_unit.feature +0 -45
- data/lib/cucumber/web/tableish.rb +0 -119
- data/lib/generators/cucumber/install/templates/step_definitions/web_steps_cs.rb.erb +0 -127
- data/lib/generators/cucumber/install/templates/step_definitions/web_steps_da.rb.erb +0 -105
- data/lib/generators/cucumber/install/templates/step_definitions/web_steps_de.rb.erb +0 -127
- data/lib/generators/cucumber/install/templates/step_definitions/web_steps_es.rb.erb +0 -127
- data/lib/generators/cucumber/install/templates/step_definitions/web_steps_ja.rb.erb +0 -140
- data/lib/generators/cucumber/install/templates/step_definitions/web_steps_ko.rb.erb +0 -142
- data/lib/generators/cucumber/install/templates/step_definitions/web_steps_no.rb.erb +0 -105
- data/lib/generators/cucumber/install/templates/step_definitions/web_steps_pt-BR.rb.erb +0 -132
- data/spec/cucumber/web/tableish_spec.rb +0 -239
data/.gitignore
CHANGED
data/History.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## [v1.2.0](https://github.com/cucumber/cucumber-rails/compare/v1.1.1...v1.2.0)
|
2
|
+
|
3
|
+
### Removed features
|
4
|
+
* The (deprecated) tableish method has been removed. See https://gist.github.com/1299371 for an alternative. (Aslak Hellesøy)
|
5
|
+
|
6
|
+
### Bugfixes
|
7
|
+
* Non-threadsafe database connections shared between threads ([#166](https://github.com/cucumber/cucumber-rails/issues/166) Matt Wynne)
|
8
|
+
|
1
9
|
## [v1.1.1](https://github.com/cucumber/cucumber-rails/compare/v1.1.0...v1.1.1)
|
2
10
|
|
3
11
|
### Removed features
|
@@ -26,7 +34,6 @@ with a Step Definition that perhaps looks like this:
|
|
26
34
|
Given /^I have signed up as "([^"]*)"$/ do |email|
|
27
35
|
visit(signup_path)
|
28
36
|
fill_in('Email', :with => email)
|
29
|
-
fill_in('Email', :with => email)
|
30
37
|
fill_in('Password', :with => 's3cr3t')
|
31
38
|
fill_in('Password Confirmation', :with => 's3cr3t')
|
32
39
|
click_button('Sign up')
|
data/Rakefile
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
CUCUMBER_RAILS_VERSION = Gem::Specification.load(File.dirname(__FILE__) + '/cucumber-rails.gemspec').version.version
|
3
3
|
require 'rubygems'
|
4
|
-
require '
|
4
|
+
require 'rake/clean'
|
5
|
+
require 'bundler'
|
5
6
|
Bundler::GemHelper.install_tasks
|
6
7
|
|
7
8
|
$:.unshift(File.dirname(__FILE__) + '/lib')
|
8
9
|
Dir["#{File.dirname(__FILE__)}/dev_tasks/*.rake"].sort.each { |ext| load ext }
|
9
10
|
|
11
|
+
CLEAN.include('doc', 'tmp')
|
10
12
|
|
11
13
|
# Needed for selenium browser
|
12
14
|
# See http://about.travis-ci.org/docs/user/selenium-setup/
|
@@ -21,5 +23,5 @@ end
|
|
21
23
|
if ENV['TRAVIS']
|
22
24
|
task :default => :travis
|
23
25
|
else
|
24
|
-
task :default => :cucumber
|
26
|
+
task :default => [:spec, :cucumber]
|
25
27
|
end
|
data/cucumber-rails.gemspec
CHANGED
@@ -3,38 +3,38 @@ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = 'cucumber-rails'
|
6
|
-
s.version = '1.
|
6
|
+
s.version = '1.2.0'
|
7
7
|
s.authors = ["Aslak Hellesøy", "Dennis Blöte", "Rob Holland"]
|
8
|
-
s.description = "Cucumber
|
8
|
+
s.description = "Cucumber Generator and Runtime for Rails"
|
9
9
|
s.summary = "#{s.name}-#{s.version}"
|
10
10
|
s.email = 'cukes@googlegroups.com'
|
11
11
|
s.homepage = "http://cukes.info"
|
12
12
|
|
13
|
-
s.add_runtime_dependency('cucumber', '>= 1.1.
|
13
|
+
s.add_runtime_dependency('cucumber', '>= 1.1.1')
|
14
14
|
s.add_runtime_dependency('nokogiri', '>= 1.5.0')
|
15
15
|
s.add_runtime_dependency('capybara', '>= 1.1.1')
|
16
|
-
s.add_development_dependency('rails', '>= 3.1.
|
16
|
+
s.add_development_dependency('rails', '>= 3.1.1')
|
17
17
|
s.add_development_dependency('rake', '>= 0.9.2')
|
18
|
-
s.add_development_dependency('bundler', '>= 1.0.
|
18
|
+
s.add_development_dependency('bundler', '>= 1.0.21')
|
19
19
|
s.add_development_dependency('aruba', '>= 0.4.6')
|
20
20
|
s.add_development_dependency('sqlite3', '>= 1.3.4')
|
21
|
-
s.add_development_dependency('rspec', '>= 2.
|
22
|
-
s.add_development_dependency('rspec-rails', '>= 2.
|
23
|
-
s.add_development_dependency('ammeter', '>= 0.1
|
24
|
-
s.add_development_dependency('factory_girl', '>= 2.
|
21
|
+
s.add_development_dependency('rspec', '>= 2.7.0')
|
22
|
+
s.add_development_dependency('rspec-rails', '>= 2.7.0')
|
23
|
+
s.add_development_dependency('ammeter', '>= 0.2.1')
|
24
|
+
s.add_development_dependency('factory_girl', '>= 2.2.0')
|
25
25
|
s.add_development_dependency('database_cleaner', '>= 0.6.7')
|
26
|
-
s.add_development_dependency('mongoid', '>= 2.
|
27
|
-
s.add_development_dependency('bson_ext', '>= 1.
|
26
|
+
s.add_development_dependency('mongoid', '>= 2.3.3')
|
27
|
+
s.add_development_dependency('bson_ext', '>= 1.4.0')
|
28
28
|
|
29
29
|
# Various Stuff that Rails 3.1 puts inside apps.
|
30
|
-
s.add_development_dependency('turn', '>= 0.8.
|
31
|
-
s.add_development_dependency('sass', '>= 3.1.
|
32
|
-
s.add_development_dependency('coffee-
|
33
|
-
s.add_development_dependency('uglifier', '>= 1.0.
|
34
|
-
s.add_development_dependency('jquery-rails', '>= 1.0.
|
30
|
+
s.add_development_dependency('turn', '>= 0.8.3')
|
31
|
+
s.add_development_dependency('sass-rails', '>= 3.1.4')
|
32
|
+
s.add_development_dependency('coffee-rails', '>= 3.1.1')
|
33
|
+
s.add_development_dependency('uglifier', '>= 1.0.4')
|
34
|
+
s.add_development_dependency('jquery-rails', '>= 1.0.16')
|
35
35
|
|
36
36
|
# For Documentation:
|
37
|
-
s.add_development_dependency('yard', '~> 0.7.
|
37
|
+
s.add_development_dependency('yard', '~> 0.7.3')
|
38
38
|
s.add_development_dependency('rdiscount', '~> 1.6.8')
|
39
39
|
s.add_development_dependency('bcat', '~> 0.6.2')
|
40
40
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: Allow Cucumber to rescue exceptions
|
2
2
|
|
3
3
|
Background: A controller that raises an exception
|
4
|
-
Given I have created a new Rails 3 app "rails-3-app"
|
4
|
+
Given I have created a new Rails 3 app "rails-3-app" and installed cucumber-rails
|
5
5
|
And I write to "app/controllers/posts_controller.rb" with:
|
6
6
|
"""
|
7
7
|
class PostsController < ApplicationController
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: Capybara Javascript Drivers
|
2
2
|
|
3
3
|
Background: A simple calendar app
|
4
|
-
Given I have created a new Rails 3 app
|
4
|
+
Given I have created a new Rails 3 app and installed cucumber-rails
|
5
5
|
And I successfully run `bundle exec rails g scaffold appointment name:string when:datetime`
|
6
6
|
And I write to "features/step_definitions/date_time_steps.rb" with:
|
7
7
|
"""
|
@@ -0,0 +1,63 @@
|
|
1
|
+
@announce
|
2
|
+
Feature: Choose javascript database strategy
|
3
|
+
|
4
|
+
When running a scenario with the @javascript tag, Capybara will fire up a web server
|
5
|
+
in the same process in a separate thread to your cukes. By default, this means ActiveRecord will give it a
|
6
|
+
separate database connection, which in turn means data you put into your database from
|
7
|
+
Cucumber step definitions (e.g. using FactoryGirl) won't be visible to the web server
|
8
|
+
until the database transaction is committed.
|
9
|
+
|
10
|
+
So if you use a transaction strategy for cleaning up your database at the end of a scenario,
|
11
|
+
it won't work for javascript scenarios by default.
|
12
|
+
|
13
|
+
There are two ways around this. One is to switch to a truncation strategy for javascript
|
14
|
+
scenarios. This is slower, but more reliable.
|
15
|
+
|
16
|
+
The alternative is to patch ActiveRecord to share a single database connection between
|
17
|
+
threads. This means you still get the speed benefits of using a transaction to roll back
|
18
|
+
your database, but you run the risk of the two threads stomping on one another as they
|
19
|
+
talk to the database.
|
20
|
+
|
21
|
+
Right now, the default behavior which works for 80% of cucumber-rails users is to use
|
22
|
+
the shared connection patch, but you can override this by telling cucumber-rails which
|
23
|
+
strategy to use for javascript scenarios.
|
24
|
+
|
25
|
+
Background:
|
26
|
+
Given I have created a new Rails 3 app and installed cucumber-rails
|
27
|
+
And I have a "Widget" ActiveRecord model object
|
28
|
+
And I append to "features/env.rb" with:
|
29
|
+
"""
|
30
|
+
Cucumber::Rails::Database.javascript_strategy = :truncation
|
31
|
+
"""
|
32
|
+
|
33
|
+
Scenario: Set the strategy to truncation and run a javascript scenario.
|
34
|
+
Given I write to "features/widgets.feature" with:
|
35
|
+
"""
|
36
|
+
@javascript
|
37
|
+
Feature:
|
38
|
+
Background:
|
39
|
+
Given I have created 2 widgets
|
40
|
+
|
41
|
+
Scenario:
|
42
|
+
When I create 3 widgets
|
43
|
+
Then I should have 5 widgets
|
44
|
+
|
45
|
+
Scenario:
|
46
|
+
Then I should have 2 widgets
|
47
|
+
"""
|
48
|
+
And I write to "features/step_definitions/widget_steps.rb" with:
|
49
|
+
"""
|
50
|
+
Given /created? (\d) widgets/ do |num|
|
51
|
+
num.to_i.times { Widget.create! }
|
52
|
+
end
|
53
|
+
|
54
|
+
Then /should have (\d) widgets/ do |num|
|
55
|
+
Widget.count.should == num.to_i
|
56
|
+
end
|
57
|
+
"""
|
58
|
+
When I run the cukes
|
59
|
+
Then it should pass with:
|
60
|
+
"""
|
61
|
+
2 scenarios (2 passed)
|
62
|
+
5 steps (5 passed)
|
63
|
+
"""
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: DatabaseCleaner
|
2
2
|
|
3
3
|
Scenario: Create records in background
|
4
|
-
Given I have created a new Rails 3 app
|
4
|
+
Given I have created a new Rails 3 app and installed cucumber-rails
|
5
5
|
And I write to "features/widgets.feature" with:
|
6
6
|
"""
|
7
7
|
Feature: Create widgets
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: Emulate Javascript
|
2
2
|
|
3
3
|
Scenario: See a widget
|
4
|
-
Given I have created a new Rails 3 app
|
4
|
+
Given I have created a new Rails 3 app and installed cucumber-rails
|
5
5
|
And I successfully run `rails generate scaffold widget name:string`
|
6
6
|
And I write to "features/f.feature" with:
|
7
7
|
"""
|
@@ -35,7 +35,7 @@ Feature: Emulate Javascript
|
|
35
35
|
"""
|
36
36
|
|
37
37
|
Scenario: Pass on the CSRF token
|
38
|
-
Given I have created a new Rails 3 app
|
38
|
+
Given I have created a new Rails 3 app and installed cucumber-rails
|
39
39
|
And I successfully run `rails generate scaffold widget name:string`
|
40
40
|
And I successfully run `sed -i -e 's/forgery_protection *= false/forgery_protection = true/' config/environments/test.rb`
|
41
41
|
And I successfully run `rails generate controller session establish`
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: Detecting a field has errors on it
|
2
2
|
|
3
3
|
Scenario: A form with some fields with errors
|
4
|
-
Given I have created a new Rails 3 app
|
4
|
+
Given I have created a new Rails 3 app and installed cucumber-rails
|
5
5
|
And I successfully run `rails generate scaffold enemy name:string nickname:string`
|
6
6
|
And I write to "app/models/enemy.rb" with:
|
7
7
|
"""
|
@@ -27,7 +27,7 @@ Feature: Detecting a field has errors on it
|
|
27
27
|
"""
|
28
28
|
|
29
29
|
Scenario: A formtastic form with some fields with errors
|
30
|
-
|
30
|
+
Given I have created a new Rails 3 app and installed cucumber-rails
|
31
31
|
And I append to "Gemfile" with:
|
32
32
|
"""
|
33
33
|
gem "formtastic"
|
@@ -5,7 +5,7 @@ Feature: Fixing Bundler Pre
|
|
5
5
|
|
6
6
|
@bundler-pre
|
7
7
|
Scenario: Install Cucumber-Rails with bundler prerelease
|
8
|
-
Given I have created a new Rails 3 app
|
8
|
+
Given I have created a new Rails 3 app and installed cucumber-rails, accidentally outside of the test group in my Gemfile
|
9
9
|
And I successfully run `rake db:migrate`
|
10
10
|
And I write to "features/tests.feature" with:
|
11
11
|
"""
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: Inspect query string
|
2
2
|
|
3
3
|
Scenario: Inspect query string
|
4
|
-
Given I have created a new Rails 3 app
|
4
|
+
Given I have created a new Rails 3 app and installed cucumber-rails
|
5
5
|
And I successfully run `rails generate scaffold cuke name:string`
|
6
6
|
And I overwrite "app/controllers/cukes_controller.rb" with:
|
7
7
|
"""
|
@@ -4,7 +4,7 @@ Feature: Rails 3
|
|
4
4
|
of Rails 3 and Ruby, with Capybara, Spork and DatabaseCleaner
|
5
5
|
|
6
6
|
Scenario: Install Cucumber-Rails
|
7
|
-
Given I have created a new Rails 3 app
|
7
|
+
Given I have created a new Rails 3 app and installed cucumber-rails
|
8
8
|
Then the following files should exist:
|
9
9
|
| config/cucumber.yml |
|
10
10
|
| script/cucumber |
|
@@ -4,7 +4,7 @@ Feature: Multiple Databases
|
|
4
4
|
I want to specify explicit strategies for each
|
5
5
|
|
6
6
|
Background: A Rails 3 app utilizing multiple database repositories exists
|
7
|
-
Given I have created a new Rails 3 app
|
7
|
+
Given I have created a new Rails 3 app and installed cucumber-rails
|
8
8
|
And I append to "config/database.yml" with:
|
9
9
|
"""
|
10
10
|
|
@@ -2,7 +2,7 @@ Feature: No Database
|
|
2
2
|
Allow Cucumber to work with a Rails app without a database
|
3
3
|
|
4
4
|
Scenario: No ActiveRecord and DatabaseCleaner
|
5
|
-
Given I have created a new Rails 3 app "rails-3-app"
|
5
|
+
Given I have created a new Rails 3 app "rails-3-app" and installed cucumber-rails
|
6
6
|
# Turn off ActiveRecord
|
7
7
|
And I write to "config/application.rb" with:
|
8
8
|
"""
|
@@ -4,7 +4,7 @@ Feature: Rerun profile
|
|
4
4
|
I want to rerun only failing features
|
5
5
|
|
6
6
|
Scenario: Rerun
|
7
|
-
Given I have created a new Rails 3 app
|
7
|
+
Given I have created a new Rails 3 app and installed cucumber-rails
|
8
8
|
And a file named "rerun.txt" with:
|
9
9
|
"""
|
10
10
|
features/rerun_test.feature:2
|
data/features/rest_api.feature
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: REST API
|
2
2
|
|
3
3
|
Scenario: Compare JSON
|
4
|
-
Given I have created a new Rails 3 app "rails-3-app"
|
4
|
+
Given I have created a new Rails 3 app "rails-3-app" and installed cucumber-rails
|
5
5
|
And I write to "app/controllers/posts_controller.rb" with:
|
6
6
|
"""
|
7
7
|
class PostsController < ApplicationController
|
data/features/routing.feature
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: Routing
|
2
2
|
|
3
3
|
Scenario: Visit undefined route
|
4
|
-
Given a
|
4
|
+
Given I have created a new Rails 3 app with no database and installed cucumber-rails
|
5
5
|
And I remove the file "public/index.html"
|
6
6
|
And I write to "features/tests.feature" with:
|
7
7
|
"""
|
@@ -1,421 +1,75 @@
|
|
1
|
-
module
|
2
|
-
def
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# http://groups.google.com/group/cukes/browse_thread/thread/26f80b93c94f2952
|
8
|
-
# https://github.com/cucumber/cucumber-rails/issues/174
|
9
|
-
# http://benmabey.com/2008/05/19/imperative-vs-declarative-scenarios-in-user-stories.html
|
10
|
-
# http://dannorth.net/2011/01/31/whose-domain-is-it-anyway/
|
11
|
-
# http://elabs.se/blog/15-you-re-cuking-it-wrong
|
12
|
-
#
|
13
|
-
# I'm sure someone will find this and paste it into their own projects. Go ahead. It's a bad idea.
|
14
|
-
# You have been warned.
|
15
|
-
#
|
16
|
-
# Aslak
|
17
|
-
|
18
|
-
require 'uri'
|
19
|
-
require 'cgi'
|
20
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
|
21
|
-
|
22
|
-
module WithinHelpers
|
23
|
-
def with_scope(locator)
|
24
|
-
locator ? within(*selector_for(locator)) { yield } : yield
|
25
|
-
end
|
26
|
-
end
|
27
|
-
World(WithinHelpers)
|
28
|
-
|
29
|
-
# Single-line step scoper
|
30
|
-
When /^(.*) within (.*[^:])$/ do |step, parent|
|
31
|
-
with_scope(parent) { When step }
|
32
|
-
end
|
33
|
-
|
34
|
-
# Multi-line step scoper
|
35
|
-
When /^(.*) within (.*[^:]):$/ do |step, parent, table_or_string|
|
36
|
-
with_scope(parent) { When "\#{step}:", table_or_string }
|
37
|
-
end
|
38
|
-
|
39
|
-
Given /^(?:|I )am on (.+)$/ do |page_name|
|
40
|
-
visit path_to(page_name)
|
41
|
-
end
|
42
|
-
|
43
|
-
When /^(?:|I )go to (.+)$/ do |page_name|
|
44
|
-
visit path_to(page_name)
|
45
|
-
end
|
46
|
-
|
47
|
-
When /^(?:|I )press "([^"]*)"$/ do |button|
|
48
|
-
click_button(button)
|
49
|
-
end
|
50
|
-
|
51
|
-
When /^(?:|I )follow "([^"]*)"$/ do |link|
|
52
|
-
click_link(link)
|
53
|
-
end
|
54
|
-
|
55
|
-
When /^(?:|I )fill in "([^"]*)" with "([^"]*)"$/ do |field, value|
|
56
|
-
fill_in(field, :with => value)
|
57
|
-
end
|
58
|
-
|
59
|
-
When /^(?:|I )fill in "([^"]*)" for "([^"]*)"$/ do |value, field|
|
60
|
-
fill_in(field, :with => value)
|
61
|
-
end
|
62
|
-
|
63
|
-
# Use this to fill in an entire form with data from a table. Example:
|
64
|
-
#
|
65
|
-
# When I fill in the following:
|
66
|
-
# | Account Number | 5002 |
|
67
|
-
# | Expiry date | 2009-11-01 |
|
68
|
-
# | Note | Nice guy |
|
69
|
-
# | Wants Email? | |
|
70
|
-
#
|
71
|
-
# TODO: Add support for checkbox, select or option
|
72
|
-
# based on naming conventions.
|
73
|
-
#
|
74
|
-
When /^(?:|I )fill in the following:$/ do |fields|
|
75
|
-
fields.rows_hash.each do |name, value|
|
76
|
-
When %{I fill in "\#{name}" with "\#{value}"}
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
When /^(?:|I )select "([^"]*)" from "([^"]*)"$/ do |value, field|
|
81
|
-
select(value, :from => field)
|
82
|
-
end
|
83
|
-
|
84
|
-
When /^(?:|I )check "([^"]*)"$/ do |field|
|
85
|
-
check(field)
|
86
|
-
end
|
87
|
-
|
88
|
-
When /^(?:|I )uncheck "([^"]*)"$/ do |field|
|
89
|
-
uncheck(field)
|
90
|
-
end
|
91
|
-
|
92
|
-
When /^(?:|I )choose "([^"]*)"$/ do |field|
|
93
|
-
choose(field)
|
94
|
-
end
|
95
|
-
|
96
|
-
When /^(?:|I )attach the file "([^"]*)" to "([^"]*)"$/ do |path, field|
|
97
|
-
attach_file(field, File.expand_path(path))
|
98
|
-
end
|
99
|
-
|
100
|
-
Then /^(?:|I )should see "([^"]*)"$/ do |text|
|
101
|
-
if page.respond_to? :should
|
102
|
-
page.should have_content(text)
|
103
|
-
else
|
104
|
-
assert page.has_content?(text)
|
1
|
+
module CucumberRailsHelper
|
2
|
+
def rails_new(options={})
|
3
|
+
options[:name] ||= 'test_app'
|
4
|
+
run_simple "rails new #{options[:name]} --skip-bundle --skip-test-unit #{options[:args]}"
|
5
|
+
assert_passing_with('README')
|
6
|
+
cd options[:name]
|
105
7
|
end
|
106
|
-
end
|
107
|
-
|
108
|
-
Then /^(?:|I )should see \\/([^\\/]*)\\/$/ do |regexp|
|
109
|
-
regexp = Regexp.new(regexp)
|
110
8
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
assert page.has_xpath?('//*', :text => regexp)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
Then /^(?:|I )should not see "([^"]*)"$/ do |text|
|
119
|
-
if page.respond_to? :should
|
120
|
-
page.should have_no_content(text)
|
121
|
-
else
|
122
|
-
assert page.has_no_content?(text)
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
Then /^(?:|I )should not see \\/([^\\/]*)\\/$/ do |regexp|
|
127
|
-
regexp = Regexp.new(regexp)
|
128
|
-
|
129
|
-
if page.respond_to? :should
|
130
|
-
page.should have_no_xpath('//*', :text => regexp)
|
131
|
-
else
|
132
|
-
assert page.has_no_xpath?('//*', :text => regexp)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
Then /^the "([^"]*)" field(?: within (.*))? should contain "([^"]*)"$/ do |field, parent, value|
|
137
|
-
with_scope(parent) do
|
138
|
-
field = find_field(field)
|
139
|
-
field_value = (field.tag_name == 'textarea') ? field.text : field.value
|
140
|
-
if field_value.respond_to? :should
|
141
|
-
field_value.should =~ /\#{value}/
|
9
|
+
def install_cucumber_rails(*options)
|
10
|
+
if options.include?(:not_in_test_group)
|
11
|
+
gem "cucumber-rails", :path => "#{File.expand_path('.')}"
|
142
12
|
else
|
143
|
-
|
13
|
+
gem "cucumber-rails", :group => :test, :path => "#{File.expand_path('.')}"
|
144
14
|
end
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
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
|
+
run_simple 'bundle exec rails generate cucumber:install'
|
20
|
+
end
|
21
|
+
|
22
|
+
def gem(name, options)
|
23
|
+
line = %{gem "#{name}", #{options.inspect}\n}
|
24
|
+
append_to_file('Gemfile', line)
|
25
|
+
end
|
26
|
+
|
27
|
+
def prepare_aruba_report
|
28
|
+
if(ENV['ARUBA_REPORT_DIR'])
|
29
|
+
@aruba_report_start = Time.new
|
30
|
+
sleep(1)
|
156
31
|
end
|
157
32
|
end
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
element = find_field(field)
|
162
|
-
classes = element.find(:xpath, '..')[:class].split(' ')
|
163
|
-
|
164
|
-
form_for_input = element.find(:xpath, 'ancestor::form[1]')
|
165
|
-
using_formtastic = form_for_input[:class].include?('formtastic')
|
166
|
-
error_class = using_formtastic ? 'error' : 'field_with_errors'
|
167
|
-
|
168
|
-
if classes.respond_to? :should
|
169
|
-
classes.should include(error_class)
|
170
|
-
else
|
171
|
-
assert classes.include?(error_class)
|
172
|
-
end
|
173
|
-
|
174
|
-
if page.respond_to?(:should)
|
175
|
-
if using_formtastic
|
176
|
-
error_paragraph = element.find(:xpath, '../*[@class="inline-errors"][1]')
|
177
|
-
error_paragraph.should have_content(error_message)
|
178
|
-
else
|
179
|
-
page.should have_content("\#{field.titlecase} \#{error_message}")
|
180
|
-
end
|
181
|
-
else
|
182
|
-
if using_formtastic
|
183
|
-
error_paragraph = element.find(:xpath, '../*[@class="inline-errors"][1]')
|
184
|
-
assert error_paragraph.has_content?(error_message)
|
185
|
-
else
|
186
|
-
assert page.has_content?("\#{field.titlecase} \#{error_message}")
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
Then /^the "([^"]*)" field should have no error$/ do |field|
|
192
|
-
element = find_field(field)
|
193
|
-
classes = element.find(:xpath, '..')[:class].split(' ')
|
194
|
-
if classes.respond_to? :should
|
195
|
-
classes.should_not include('field_with_errors')
|
196
|
-
classes.should_not include('error')
|
197
|
-
else
|
198
|
-
assert !classes.include?('field_with_errors')
|
199
|
-
assert !classes.include?('error')
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
Then /^the "([^"]*)" checkbox(?: within (.*))? should be checked$/ do |label, parent|
|
204
|
-
with_scope(parent) do
|
205
|
-
field_checked = find_field(label)['checked']
|
206
|
-
if field_checked.respond_to? :should
|
207
|
-
field_checked.should be_true
|
208
|
-
else
|
209
|
-
assert field_checked
|
210
|
-
end
|
33
|
+
|
34
|
+
def fixture(path)
|
35
|
+
File.expand_path(File.dirname(__FILE__) + "./../support/fixtures/#{path}")
|
211
36
|
end
|
212
37
|
end
|
38
|
+
World(CucumberRailsHelper)
|
213
39
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
if field_checked.respond_to? :should
|
218
|
-
field_checked.should be_false
|
219
|
-
else
|
220
|
-
assert !field_checked
|
221
|
-
end
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
Then /^(?:|I )should be on (.+)$/ do |page_name|
|
226
|
-
current_path = URI.parse(current_url).path
|
227
|
-
if current_path.respond_to? :should
|
228
|
-
current_path.should == path_to(page_name)
|
229
|
-
else
|
230
|
-
assert_equal path_to(page_name), current_path
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
Then /^(?:|I )should have the following query string:$/ do |expected_pairs|
|
235
|
-
query = URI.parse(current_url).query
|
236
|
-
actual_params = query ? CGI.parse(query) : {}
|
237
|
-
expected_params = {}
|
238
|
-
expected_pairs.rows_hash.each_pair{|k,v| expected_params[k] = v.split(',')}
|
239
|
-
|
240
|
-
if actual_params.respond_to? :should
|
241
|
-
actual_params.should == expected_params
|
242
|
-
else
|
243
|
-
assert_equal expected_params, actual_params
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
Then /^show me the page$/ do
|
248
|
-
save_and_open_page
|
249
|
-
end
|
250
|
-
EOF
|
251
|
-
|
252
|
-
write_file('features/support/paths.rb', <<-EOF)
|
253
|
-
module NavigationHelpers
|
254
|
-
# Maps a name to a path. Used by the
|
255
|
-
#
|
256
|
-
# When /^I go to (.+)$/ do |page_name|
|
257
|
-
#
|
258
|
-
# step definition in web_steps.rb
|
259
|
-
#
|
260
|
-
def path_to(page_name)
|
261
|
-
case page_name
|
262
|
-
|
263
|
-
when /^the home\s?page$/
|
264
|
-
'/'
|
265
|
-
|
266
|
-
# Add more mappings here.
|
267
|
-
# Here is an example that pulls values out of the Regexp:
|
268
|
-
#
|
269
|
-
# when /^(.*)'s profile page$/i
|
270
|
-
# user_profile_path(User.find_by_login($1))
|
271
|
-
|
272
|
-
else
|
273
|
-
begin
|
274
|
-
page_name =~ /^the (.*) page$/
|
275
|
-
path_components = $1.split(/\s+/)
|
276
|
-
self.send(path_components.push('path').join('_').to_sym)
|
277
|
-
rescue NoMethodError, ArgumentError
|
278
|
-
raise "Can't find mapping from \"\#{page_name}\" to a path.\\n" +
|
279
|
-
"Now, go and add a mapping in \#{__FILE__}"
|
280
|
-
end
|
281
|
-
end
|
282
|
-
end
|
283
|
-
end
|
284
|
-
|
285
|
-
World(NavigationHelpers)
|
286
|
-
EOF
|
287
|
-
end
|
288
|
-
end
|
289
|
-
World(WebSteps)
|
290
|
-
|
291
|
-
Given /^I have created a new Rails 3 app "([^"]*)" with cucumber\-rails support and cucumber-rails is outside of test group$/ do |app_name|
|
292
|
-
steps %Q{
|
293
|
-
When I successfully run `rails new #{app_name}`
|
294
|
-
Then it should pass with:
|
295
|
-
"""
|
296
|
-
README
|
297
|
-
"""
|
298
|
-
And I cd to "#{app_name}"
|
299
|
-
And I append to "Gemfile" with:
|
300
|
-
"""
|
301
|
-
gem "cucumber-rails", :path => "../../.."
|
302
|
-
gem "capybara", :group => :test
|
303
|
-
gem "rspec-rails", :group => :test
|
304
|
-
gem "database_cleaner", :group => :test
|
305
|
-
gem 'factory_girl', :group => :test
|
306
|
-
|
307
|
-
"""
|
308
|
-
And I successfully run `bundle exec rails generate cucumber:install`
|
309
|
-
}
|
40
|
+
Given /^I have created a new Rails 3 app and installed cucumber\-rails, accidentally outside of the test group in my Gemfile$/ do
|
41
|
+
rails_new
|
42
|
+
install_cucumber_rails :not_in_test_group
|
310
43
|
create_web_steps
|
311
|
-
|
312
|
-
@aruba_report_start = Time.new
|
313
|
-
sleep(1)
|
314
|
-
end
|
44
|
+
prepare_aruba_report
|
315
45
|
end
|
316
46
|
|
317
|
-
Given /^I have created a new Rails 3 app "([^"]*)"
|
318
|
-
|
319
|
-
|
320
|
-
Then it should pass with:
|
321
|
-
"""
|
322
|
-
README
|
323
|
-
"""
|
324
|
-
And I cd to "#{app_name}"
|
325
|
-
And I append to "Gemfile" with:
|
326
|
-
"""
|
327
|
-
gem "cucumber-rails", :group => :test, :path => "../../.."
|
328
|
-
gem "capybara", :group => :test
|
329
|
-
gem "rspec-rails", :group => :test
|
330
|
-
gem "database_cleaner", :group => :test
|
331
|
-
gem 'factory_girl', :group => :test
|
332
|
-
|
333
|
-
"""
|
334
|
-
And I successfully run `bundle exec rails generate cucumber:install`
|
335
|
-
}
|
47
|
+
Given /^I have created a new Rails 3 app "([^"]*)" and installed cucumber\-rails$/ do |app_name|
|
48
|
+
rails_new :name => app_name
|
49
|
+
install_cucumber_rails
|
336
50
|
create_web_steps
|
337
|
-
|
338
|
-
@aruba_report_start = Time.new
|
339
|
-
sleep(1)
|
340
|
-
end
|
51
|
+
prepare_aruba_report
|
341
52
|
end
|
342
53
|
|
343
|
-
Given /^a
|
344
|
-
|
345
|
-
|
346
|
-
And I cd to "cuke-app"
|
347
|
-
And I append to "Gemfile" with:
|
348
|
-
"""
|
349
|
-
gem "cucumber-rails", :group => :test, :path => "../../.."
|
350
|
-
gem "capybara", :group => :test
|
351
|
-
gem "rspec-rails", :group => :test
|
352
|
-
|
353
|
-
"""
|
354
|
-
And I successfully run `bundle exec rails generate cucumber:install`
|
355
|
-
And I overwrite "features/support/env.rb" with:
|
356
|
-
"""
|
357
|
-
require 'cucumber/rails'
|
358
|
-
|
359
|
-
"""
|
360
|
-
|
361
|
-
And I write to "config/application.rb" with:
|
362
|
-
"""
|
363
|
-
require File.expand_path('../boot', __FILE__)
|
364
|
-
|
365
|
-
require 'action_controller/railtie'
|
366
|
-
require 'action_mailer/railtie'
|
367
|
-
require 'active_resource/railtie'
|
368
|
-
require 'rails/test_unit/railtie'
|
369
|
-
|
370
|
-
Bundler.require(:default, Rails.env) if defined?(Bundler)
|
371
|
-
|
372
|
-
module CukeApp
|
373
|
-
class Application < Rails::Application
|
374
|
-
config.encoding = "utf-8"
|
375
|
-
config.filter_parameters += [:password]
|
376
|
-
end
|
377
|
-
end
|
378
|
-
|
379
|
-
"""
|
380
|
-
And I remove the file "config/database.yml"
|
381
|
-
}
|
54
|
+
Given /^I have created a new Rails 3 app and installed cucumber\-rails$/ do
|
55
|
+
rails_new
|
56
|
+
install_cucumber_rails
|
382
57
|
create_web_steps
|
383
|
-
|
384
|
-
@aruba_report_start = Time.new
|
385
|
-
sleep(1)
|
386
|
-
end
|
58
|
+
prepare_aruba_report
|
387
59
|
end
|
388
60
|
|
389
|
-
Given /^a
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
resources :cukes
|
395
|
-
end
|
396
|
-
|
397
|
-
"""
|
398
|
-
And I write to "app/controllers/cukes_controller.rb" with:
|
399
|
-
"""
|
400
|
-
class CukesController < ApplicationController
|
401
|
-
def index
|
402
|
-
end
|
403
|
-
end
|
404
|
-
|
405
|
-
"""
|
406
|
-
}
|
61
|
+
Given /^I have created a new Rails 3 app with no database and installed cucumber-rails$/ do
|
62
|
+
rails_new :args => '--skip-active-record'
|
63
|
+
install_cucumber_rails :no_database_cleaner, :no_factory_girl
|
64
|
+
overwrite_file('features/support/env.rb', "require 'cucumber/rails'\n")
|
65
|
+
create_web_steps
|
407
66
|
end
|
408
67
|
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
And I successfully run `gem install bundler --pre`
|
413
|
-
}
|
68
|
+
Given /^I have a "([^"]*)" ActiveRecord model object$/ do |name|
|
69
|
+
run_simple("bundle exec rails g model #{name}")
|
70
|
+
run_simple("bundle exec rake db:migrate RAILS_ENV=test")
|
414
71
|
end
|
415
72
|
|
416
|
-
|
417
|
-
|
418
|
-
Given I successfully run `gem uninstall bundler`
|
419
|
-
And I successfully run `gem install bundler`
|
420
|
-
}
|
73
|
+
When /^I run the cukes$/ do
|
74
|
+
run_simple('bundle exec cucumber')
|
421
75
|
end
|