Commit 3b68729e391f7ce60d4cfabaf3bc458711d933cf
1 parent
504bc402
Exists in
master
and in
29 other branches
rails3: fix cucumber initialization
Showing
7 changed files
with
159 additions
and
75 deletions
Show diff stats
Gemfile
... | ... | @@ -5,6 +5,7 @@ gem 'acts-as-taggable-on' |
5 | 5 | gem 'prototype-rails' |
6 | 6 | gem 'prototype_legacy_helper', '0.0.0', :git => 'http://git.github.com/rails/prototype_legacy_helper.git' |
7 | 7 | gem 'rails_autolink' |
8 | +gem 'pg' | |
8 | 9 | |
9 | 10 | # TODO needs a rebuild diff-lcs wrt wheezy |
10 | 11 | |
... | ... | @@ -12,16 +13,17 @@ gem 'rails_autolink' |
12 | 13 | # with their GEM names (not the Debian package names) |
13 | 14 | |
14 | 15 | group :test do |
15 | - #gem 'rspec' | |
16 | - #gem 'rspec-rails' | |
16 | + gem 'rspec' | |
17 | + gem 'rspec-rails' | |
17 | 18 | end |
18 | 19 | |
19 | 20 | group :cucumber do |
20 | 21 | gem 'rake' |
21 | - # TODO gem 'cucumber-rails' | |
22 | - # TODO gem 'capybara' | |
23 | - # gem 'cucumber' | |
24 | - # TODO gem 'database_cleaner' | |
22 | + gem 'cucumber-rails', :require => false | |
23 | + gem 'capybara' | |
24 | + gem 'cucumber' | |
25 | + gem 'database_cleaner' | |
26 | + gem 'selenium-webdriver' | |
25 | 27 | end |
26 | 28 | |
27 | 29 | def program(name) | ... | ... |
Gemfile.lock
... | ... | @@ -38,8 +38,31 @@ GEM |
38 | 38 | rails (>= 3, < 5) |
39 | 39 | arel (3.0.2) |
40 | 40 | builder (3.0.0) |
41 | + capybara (2.2.1) | |
42 | + mime-types (>= 1.16) | |
43 | + nokogiri (>= 1.3.3) | |
44 | + rack (>= 1.0.0) | |
45 | + rack-test (>= 0.5.4) | |
46 | + xpath (~> 2.0) | |
47 | + childprocess (0.4.0) | |
48 | + ffi (~> 1.0, >= 1.0.11) | |
49 | + cucumber (1.3.2) | |
50 | + builder (>= 2.1.2) | |
51 | + diff-lcs (>= 1.1.3) | |
52 | + gherkin (~> 2.12.0) | |
53 | + multi_json (~> 1.3) | |
54 | + cucumber-rails (1.4.0) | |
55 | + capybara (>= 1.1.2) | |
56 | + cucumber (>= 1.2.0) | |
57 | + nokogiri (>= 1.5.0) | |
58 | + rails (>= 3.0.0) | |
59 | + database_cleaner (1.2.0) | |
60 | + diff-lcs (1.2.5) | |
41 | 61 | erubis (2.7.0) |
42 | 62 | fast_gettext (0.6.8) |
63 | + ffi (1.9.3) | |
64 | + gherkin (2.12.2) | |
65 | + multi_json (~> 1.3) | |
43 | 66 | hike (1.2.1) |
44 | 67 | i18n (0.6.0) |
45 | 68 | journey (1.0.3) |
... | ... | @@ -48,7 +71,11 @@ GEM |
48 | 71 | mime-types (~> 1.16) |
49 | 72 | treetop (~> 1.4.8) |
50 | 73 | mime-types (1.19) |
74 | + mini_portile (0.5.2) | |
51 | 75 | multi_json (1.3.6) |
76 | + nokogiri (1.6.1) | |
77 | + mini_portile (~> 0.5.0) | |
78 | + pg (0.17.1) | |
52 | 79 | polyglot (0.3.3) |
53 | 80 | prototype-rails (3.2.1) |
54 | 81 | rails (~> 3.2) |
... | ... | @@ -78,6 +105,28 @@ GEM |
78 | 105 | thor (>= 0.14.6, < 2.0) |
79 | 106 | rake (0.9.2.2) |
80 | 107 | rdoc (3.9.4) |
108 | + rspec (2.14.1) | |
109 | + rspec-core (~> 2.14.0) | |
110 | + rspec-expectations (~> 2.14.0) | |
111 | + rspec-mocks (~> 2.14.0) | |
112 | + rspec-core (2.14.7) | |
113 | + rspec-expectations (2.14.5) | |
114 | + diff-lcs (>= 1.1.3, < 2.0) | |
115 | + rspec-mocks (2.14.5) | |
116 | + rspec-rails (2.14.1) | |
117 | + actionpack (>= 3.0) | |
118 | + activemodel (>= 3.0) | |
119 | + activesupport (>= 3.0) | |
120 | + railties (>= 3.0) | |
121 | + rspec-core (~> 2.14.0) | |
122 | + rspec-expectations (~> 2.14.0) | |
123 | + rspec-mocks (~> 2.14.0) | |
124 | + rubyzip (1.1.0) | |
125 | + selenium-webdriver (2.39.0) | |
126 | + childprocess (>= 0.2.5) | |
127 | + multi_json (~> 1.0) | |
128 | + rubyzip (~> 1.0) | |
129 | + websocket (~> 1.0.4) | |
81 | 130 | sprockets (2.1.3) |
82 | 131 | hike (~> 1.2) |
83 | 132 | multi_json (~> 1.0) |
... | ... | @@ -89,15 +138,26 @@ GEM |
89 | 138 | polyglot |
90 | 139 | polyglot (>= 0.3.1) |
91 | 140 | tzinfo (0.3.33) |
141 | + websocket (1.0.7) | |
142 | + xpath (2.0.0) | |
143 | + nokogiri (~> 1.3) | |
92 | 144 | |
93 | 145 | PLATFORMS |
94 | 146 | ruby |
95 | 147 | |
96 | 148 | DEPENDENCIES |
97 | 149 | acts-as-taggable-on |
150 | + capybara | |
151 | + cucumber | |
152 | + cucumber-rails | |
153 | + database_cleaner | |
98 | 154 | fast_gettext |
155 | + pg | |
99 | 156 | prototype-rails |
100 | 157 | prototype_legacy_helper (= 0.0.0)! |
101 | 158 | rails |
102 | 159 | rails_autolink |
103 | 160 | rake |
161 | + rspec | |
162 | + rspec-rails | |
163 | + selenium-webdriver | ... | ... |
config/environments/cucumber.rb
1 | -# Edit at your own peril - it's recommended to regenerate this file | |
2 | -# in the future when you upgrade to a newer version of Cucumber. | |
1 | +Noosfero::Application.configure do | |
2 | + # Edit at your own peril - it's recommended to regenerate this file | |
3 | + # in the future when you upgrade to a newer version of Cucumber. | |
3 | 4 | |
4 | -# IMPORTANT: Setting config.cache_classes to false is known to | |
5 | -# break Cucumber's use_transactional_fixtures method. | |
6 | -# For more information see https://rspec.lighthouseapp.com/projects/16211/tickets/165 | |
7 | -config.cache_classes = true | |
5 | + # IMPORTANT: Setting config.cache_classes to false is known to | |
6 | + # break Cucumber's use_transactional_fixtures method. | |
7 | + # For more information see https://rspec.lighthouseapp.com/projects/16211/tickets/165 | |
8 | + config.cache_classes = true | |
8 | 9 | |
9 | -# Log error messages when you accidentally call methods on nil. | |
10 | -config.whiny_nils = true | |
10 | + config.active_support.deprecation = :log | |
11 | 11 | |
12 | -# Show full error reports and disable caching | |
13 | -config.action_controller.perform_caching = false | |
12 | + # Log error messages when you accidentally call methods on nil. | |
13 | + config.whiny_nils = true | |
14 | 14 | |
15 | -# Disable request forgery protection in test environment | |
16 | -config.action_controller.allow_forgery_protection = false | |
15 | + # Show full error reports and disable caching | |
16 | + config.action_controller.perform_caching = false | |
17 | 17 | |
18 | -# Tell Action Mailer not to deliver emails to the real world. | |
19 | -# The :test delivery method accumulates sent emails in the | |
20 | -# ActionMailer::Base.deliveries array. | |
21 | -config.action_mailer.delivery_method = :test | |
18 | + # Disable request forgery protection in test environment | |
19 | + config.action_controller.allow_forgery_protection = false | |
22 | 20 | |
23 | -config.gem 'cucumber-rails', :lib => false, :version => '>=0.3.2' unless File.directory?(Rails.root.join('vendor/plugins/cucumber-rails')) | |
24 | -config.gem 'database_cleaner', :lib => false, :version => '>=0.5.0' unless File.directory?(Rails.root.join('vendor/plugins/database_cleaner')) | |
25 | -config.gem 'capybara', :lib => false, :version => '>=0.3.5' unless File.directory?(Rails.root.join('vendor/plugins/capybara')) | |
21 | + # Tell Action Mailer not to deliver emails to the real world. | |
22 | + # The :test delivery method accumulates sent emails in the | |
23 | + # ActionMailer::Base.deliveries array. | |
24 | + config.action_mailer.delivery_method = :test | |
26 | 25 | |
26 | + config.gem 'cucumber-rails', :lib => false, :version => '>=0.3.2' unless File.directory?(Rails.root.join('vendor/plugins/cucumber-rails')) | |
27 | + config.gem 'database_cleaner', :lib => false, :version => '>=0.5.0' unless File.directory?(Rails.root.join('vendor/plugins/database_cleaner')) | |
28 | + config.gem 'capybara', :lib => false, :version => '>=0.3.5' unless File.directory?(Rails.root.join('vendor/plugins/capybara')) | |
29 | +end | ... | ... |
features/step_definitions/noosfero_steps.rb
features/support/env.rb
... | ... | @@ -4,56 +4,70 @@ |
4 | 4 | # instead of editing this one. Cucumber will automatically load all features/**/*.rb |
5 | 5 | # files. |
6 | 6 | |
7 | -ENV["RAILS_ENV"] ||= "cucumber" | |
7 | +require 'cucumber/rails' | |
8 | 8 | |
9 | 9 | require File.expand_path(File.dirname(__FILE__) + '/../../config/environment') |
10 | 10 | |
11 | -require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support | |
12 | -require 'cucumber/rails/world' | |
13 | -require 'cucumber/rails/active_record' | |
14 | -require 'cucumber/web/tableish' | |
15 | - | |
16 | -require 'capybara/rails' | |
17 | -require 'capybara/cucumber' | |
18 | -require 'capybara/session' | |
19 | -# require 'cucumber/rails/capybara_javascript_emulation' # Lets you click links with onclick javascript handlers without using @culerity or @javascript | |
20 | -# Capybara defaults to XPath selectors rather than Webrat's default of CSS3. In | |
21 | -# order to ease the transition to Capybara we set the default here. If you'd | |
22 | -# prefer to use XPath just remove this line and adjust any selectors in your | |
23 | -# steps to use the XPath syntax. | |
24 | -Capybara.default_selector = :css | |
25 | 11 | Capybara.ignore_hidden_elements = true |
26 | 12 | |
27 | -# If you set this to false, any error raised from within your app will bubble | |
28 | -# up to your step definition and out to cucumber unless you catch it somewhere | |
29 | -# on the way. You can make Rails rescue errors and render error pages on a | |
30 | -# per-scenario basis by tagging a scenario or feature with the @allow-rescue tag. | |
13 | +# Capybara defaults to CSS3 selectors rather than XPath. | |
14 | +# If you'd prefer to use XPath, just uncomment this line and adjust any | |
15 | +# selectors in your step definitions to use the XPath syntax. | |
16 | +# Capybara.default_selector = :xpath | |
17 | + | |
18 | +# By default, any exception happening in your Rails application will bubble up | |
19 | +# to Cucumber so that your scenario will fail. This is a different from how | |
20 | +# your application behaves in the production environment, where an error page will | |
21 | +# be rendered instead. | |
22 | +# | |
23 | +# Sometimes we want to override this default behaviour and allow Rails to rescue | |
24 | +# exceptions and display an error page (just like when the app is running in production). | |
25 | +# Typical scenarios where you want to do this is when you test your error pages. | |
26 | +# There are two ways to allow Rails to rescue exceptions: | |
27 | +# | |
28 | +# 1) Tag your scenario (or feature) with @allow-rescue | |
29 | +# | |
30 | +# 2) Set the value below to true. Beware that doing this globally is not | |
31 | +# recommended as it will mask a lot of errors for you! | |
31 | 32 | # |
32 | -# If you set this to true, Rails will rescue all errors and render error | |
33 | -# pages, more or less in the same way your application would behave in the | |
34 | -# default production environment. It's not recommended to do this for all | |
35 | -# of your scenarios, as this makes it hard to discover errors in your application. | |
36 | 33 | ActionController::Base.allow_rescue = false |
37 | 34 | |
38 | -# If you set this to true, each scenario will run in a database transaction. | |
39 | -# You can still turn off transactions on a per-scenario basis, simply tagging | |
40 | -# a feature or scenario with the @no-txn tag. If you are using Capybara, | |
41 | -# tagging with @culerity or @javascript will also turn transactions off. | |
35 | +# Remove/comment out the lines below if your app doesn't have a database. | |
36 | +# For some databases (like MongoDB and CouchDB) you may need to use :truncation instead. | |
37 | +begin | |
38 | + DatabaseCleaner.strategy = :transaction | |
39 | +rescue NameError | |
40 | + raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it." | |
41 | +end | |
42 | + | |
43 | +# You may also want to configure DatabaseCleaner to use different strategies for certain features and scenarios. | |
44 | +# See the DatabaseCleaner documentation for details. Example: | |
45 | +# | |
46 | +# Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do | |
47 | +# # { :except => [:widgets] } may not do what you expect here | |
48 | +# # as Cucumber::Rails::Database.javascript_strategy overrides | |
49 | +# # this setting. | |
50 | +# DatabaseCleaner.strategy = :truncation | |
51 | +# end | |
42 | 52 | # |
43 | -# If you set this to false, transactions will be off for all scenarios, | |
44 | -# regardless of whether you use @no-txn or not. | |
53 | +# Before('~@no-txn', '~@selenium', '~@culerity', '~@celerity', '~@javascript') do | |
54 | +# DatabaseCleaner.strategy = :transaction | |
55 | +# end | |
45 | 56 | # |
46 | -# Beware that turning transactions off will leave data in your database | |
47 | -# after each scenario, which can lead to hard-to-debug failures in | |
48 | -# subsequent scenarios. If you do this, we recommend you create a Before | |
49 | -# block that will explicitly put your database in a known state. | |
57 | + | |
58 | +# Possible values are :truncation and :transaction | |
59 | +# The :transaction strategy is faster, but might give you threading problems. | |
60 | +# See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature | |
61 | +Cucumber::Rails::Database.javascript_strategy = :truncation | |
62 | + | |
50 | 63 | Cucumber::Rails::World.use_transactional_fixtures = true |
51 | 64 | # How to clean your database when transactions are turned off. See |
52 | 65 | # http://github.com/bmabey/database_cleaner for more info. |
53 | 66 | |
54 | 67 | Before do |
55 | - Fixtures.reset_cache | |
56 | - fixtures_folder = File.join(RAILS_ROOT, 'test', 'fixtures') | |
68 | + ActiveRecord::Fixtures.reset_cache | |
69 | + fixtures_folder = Rails.root.join('test', 'fixtures') | |
57 | 70 | fixtures = ['environments', 'roles'] |
58 | - Fixtures.create_fixtures(fixtures_folder, fixtures) | |
71 | + ActiveRecord::Fixtures.create_fixtures(fixtures_folder, fixtures) | |
59 | 72 | end |
73 | + | ... | ... |
features/support/fixtures.rb
lib/tasks/cucumber.rake
1 | 1 | # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril. |
2 | -# It is recommended to regenerate this file in the future when you upgrade to a | |
3 | -# newer version of cucumber-rails. Consider adding your own code to a new file | |
2 | +# It is recommended to regenerate this file in the future when you upgrade to a | |
3 | +# newer version of cucumber-rails. Consider adding your own code to a new file | |
4 | 4 | # instead of editing this one. Cucumber will automatically load all features/**/*.rb |
5 | 5 | # files. |
6 | 6 | |
7 | 7 | |
8 | 8 | unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks |
9 | 9 | |
10 | -vendored_cucumber_bin = Dir[Rails.root.join('vendor', '{gems,plugins}', 'cucumber*', 'bin', 'cucumber')].first | |
10 | +vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first | |
11 | 11 | $LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil? |
12 | 12 | |
13 | 13 | begin |
14 | 14 | require 'cucumber/rake/task' |
15 | 15 | |
16 | 16 | namespace :cucumber do |
17 | - Cucumber::Rake::Task.new({:ok => 'db:test:prepare'}, 'Run features that should pass') do |t| | |
17 | + Cucumber::Rake::Task.new({:ok => 'test:prepare'}, 'Run features that should pass') do |t| | |
18 | 18 | t.binary = vendored_cucumber_bin # If nil, the gem's binary is used. |
19 | 19 | t.fork = true # You may get faster startup if you set this to false |
20 | 20 | t.profile = 'default' |
21 | 21 | end |
22 | 22 | |
23 | - Cucumber::Rake::Task.new({:wip => 'db:test:prepare'}, 'Run features that are being worked on') do |t| | |
23 | + Cucumber::Rake::Task.new({:wip => 'test:prepare'}, 'Run features that are being worked on') do |t| | |
24 | 24 | t.binary = vendored_cucumber_bin |
25 | 25 | t.fork = true # You may get faster startup if you set this to false |
26 | 26 | t.profile = 'wip' |
27 | 27 | end |
28 | 28 | |
29 | - Cucumber::Rake::Task.new({:rerun => 'db:test:prepare'}, 'Record failing features and run only them if any exist') do |t| | |
29 | + Cucumber::Rake::Task.new({:rerun => 'test:prepare'}, 'Record failing features and run only them if any exist') do |t| | |
30 | 30 | t.binary = vendored_cucumber_bin |
31 | 31 | t.fork = true # You may get faster startup if you set this to false |
32 | 32 | t.profile = 'rerun' |
... | ... | @@ -34,6 +34,12 @@ begin |
34 | 34 | |
35 | 35 | desc 'Run all features' |
36 | 36 | task :all => [:ok, :wip] |
37 | + | |
38 | + task :statsetup do | |
39 | + require 'rails/code_statistics' | |
40 | + ::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features') | |
41 | + ::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?('features') | |
42 | + end | |
37 | 43 | end |
38 | 44 | desc 'Alias for cucumber:ok' |
39 | 45 | task :cucumber => 'cucumber:ok' |
... | ... | @@ -43,6 +49,12 @@ begin |
43 | 49 | task :features => :cucumber do |
44 | 50 | STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***" |
45 | 51 | end |
52 | + | |
53 | + # In case we don't have the generic Rails test:prepare hook, append a no-op task that we can depend upon. | |
54 | + task 'test:prepare' do | |
55 | + end | |
56 | + | |
57 | + task :stats => 'cucumber:statsetup' | |
46 | 58 | rescue LoadError |
47 | 59 | desc 'cucumber rake task not available (cucumber not installed)' |
48 | 60 | task :cucumber do | ... | ... |