Commit 1a7914112130fe67bf8fbbad953d2ace9882a67a
1 parent
03fa53b5
Exists in
colab
and in
4 other branches
Cucumber added for feature tests
Shoulda matchers added to make easy to write lots of tests
Showing
7 changed files
with
181 additions
and
1 deletions
Show diff stats
Gemfile
... | ... | @@ -22,11 +22,20 @@ end |
22 | 22 | |
23 | 23 | gem 'jquery-rails' |
24 | 24 | |
25 | +group :test do | |
26 | + gem "shoulda-matchers" | |
27 | +end | |
28 | + | |
25 | 29 | group :development, :test do |
26 | 30 | gem 'rspec-rails' |
27 | 31 | gem 'factory_girl_rails' |
28 | 32 | end |
29 | 33 | |
34 | +group :cucumber do | |
35 | + gem 'cucumber-rails' | |
36 | + gem 'database_cleaner' | |
37 | +end | |
38 | + | |
30 | 39 | # To use ActiveModel has_secure_password |
31 | 40 | # gem 'bcrypt-ruby', '~> 3.0.0' |
32 | 41 | ... | ... |
Gemfile.lock
... | ... | @@ -30,6 +30,12 @@ GEM |
30 | 30 | multi_json (~> 1.0) |
31 | 31 | arel (3.0.2) |
32 | 32 | builder (3.0.4) |
33 | + capybara (2.1.0) | |
34 | + mime-types (>= 1.16) | |
35 | + nokogiri (>= 1.3.3) | |
36 | + rack (>= 1.0.0) | |
37 | + rack-test (>= 0.5.4) | |
38 | + xpath (~> 2.0) | |
33 | 39 | coffee-rails (3.2.2) |
34 | 40 | coffee-script (>= 2.2.0) |
35 | 41 | railties (~> 3.2.0) |
... | ... | @@ -37,6 +43,17 @@ GEM |
37 | 43 | coffee-script-source |
38 | 44 | execjs |
39 | 45 | coffee-script-source (1.6.2) |
46 | + cucumber (1.3.1) | |
47 | + builder (>= 2.1.2) | |
48 | + diff-lcs (>= 1.1.3) | |
49 | + gherkin (~> 2.12.0) | |
50 | + multi_json (~> 1.3) | |
51 | + cucumber-rails (1.3.1) | |
52 | + capybara (>= 1.1.2) | |
53 | + cucumber (>= 1.2.0) | |
54 | + nokogiri (>= 1.5.0) | |
55 | + rails (~> 3.0) | |
56 | + database_cleaner (0.9.1) | |
40 | 57 | diff-lcs (1.2.4) |
41 | 58 | erubis (2.7.0) |
42 | 59 | execjs (1.4.0) |
... | ... | @@ -46,6 +63,8 @@ GEM |
46 | 63 | factory_girl_rails (4.2.1) |
47 | 64 | factory_girl (~> 4.2.0) |
48 | 65 | railties (>= 3.0.0) |
66 | + gherkin (2.12.0) | |
67 | + multi_json (~> 1.3) | |
49 | 68 | hike (1.2.2) |
50 | 69 | i18n (0.6.1) |
51 | 70 | journey (1.0.4) |
... | ... | @@ -60,6 +79,7 @@ GEM |
60 | 79 | treetop (~> 1.4.8) |
61 | 80 | mime-types (1.23) |
62 | 81 | multi_json (1.7.3) |
82 | + nokogiri (1.5.9) | |
63 | 83 | polyglot (0.3.3) |
64 | 84 | rack (1.4.5) |
65 | 85 | rack-cache (1.2) |
... | ... | @@ -103,6 +123,8 @@ GEM |
103 | 123 | railties (~> 3.2.0) |
104 | 124 | sass (>= 3.1.10) |
105 | 125 | tilt (~> 1.3) |
126 | + shoulda-matchers (2.1.0) | |
127 | + activesupport (>= 3.0.0) | |
106 | 128 | sprockets (2.2.2) |
107 | 129 | hike (~> 1.2) |
108 | 130 | multi_json (~> 1.0) |
... | ... | @@ -121,17 +143,22 @@ GEM |
121 | 143 | uglifier (2.0.1) |
122 | 144 | execjs (>= 0.3.0) |
123 | 145 | multi_json (~> 1.0, >= 1.0.2) |
146 | + xpath (2.0.0) | |
147 | + nokogiri (~> 1.3) | |
124 | 148 | |
125 | 149 | PLATFORMS |
126 | 150 | ruby |
127 | 151 | |
128 | 152 | DEPENDENCIES |
129 | 153 | coffee-rails (~> 3.2.1) |
154 | + cucumber-rails | |
155 | + database_cleaner | |
130 | 156 | factory_girl_rails |
131 | 157 | jquery-rails |
132 | 158 | rails (= 3.2.13) |
133 | 159 | rspec-rails |
134 | 160 | sass-rails (~> 3.2.3) |
161 | + shoulda-matchers | |
135 | 162 | sqlite3 |
136 | 163 | therubyracer |
137 | 164 | uglifier (>= 1.0.3) | ... | ... |
... | ... | @@ -0,0 +1,8 @@ |
1 | +<% | |
2 | +rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : "" | |
3 | +rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}" | |
4 | +std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip" | |
5 | +%> | |
6 | +default: <%= std_opts %> features | |
7 | +wip: --tags @wip:3 --wip features | |
8 | +rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip | ... | ... |
config/database.yml
... | ... | @@ -12,7 +12,7 @@ development: |
12 | 12 | # Warning: The database defined as "test" will be erased and |
13 | 13 | # re-generated from your development database when you run "rake". |
14 | 14 | # Do not set this db to the same as development or production. |
15 | -test: | |
15 | +test: &test | |
16 | 16 | adapter: sqlite3 |
17 | 17 | database: db/test.sqlite3 |
18 | 18 | pool: 5 |
... | ... | @@ -23,3 +23,6 @@ production: |
23 | 23 | database: db/production.sqlite3 |
24 | 24 | pool: 5 |
25 | 25 | timeout: 5000 |
26 | + | |
27 | +cucumber: | |
28 | + <<: *test | |
26 | 29 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,58 @@ |
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 | |
4 | +# instead of editing this one. Cucumber will automatically load all features/**/*.rb | |
5 | +# files. | |
6 | + | |
7 | +require 'cucumber/rails' | |
8 | + | |
9 | +# Capybara defaults to CSS3 selectors rather than XPath. | |
10 | +# If you'd prefer to use XPath, just uncomment this line and adjust any | |
11 | +# selectors in your step definitions to use the XPath syntax. | |
12 | +# Capybara.default_selector = :xpath | |
13 | + | |
14 | +# By default, any exception happening in your Rails application will bubble up | |
15 | +# to Cucumber so that your scenario will fail. This is a different from how | |
16 | +# your application behaves in the production environment, where an error page will | |
17 | +# be rendered instead. | |
18 | +# | |
19 | +# Sometimes we want to override this default behaviour and allow Rails to rescue | |
20 | +# exceptions and display an error page (just like when the app is running in production). | |
21 | +# Typical scenarios where you want to do this is when you test your error pages. | |
22 | +# There are two ways to allow Rails to rescue exceptions: | |
23 | +# | |
24 | +# 1) Tag your scenario (or feature) with @allow-rescue | |
25 | +# | |
26 | +# 2) Set the value below to true. Beware that doing this globally is not | |
27 | +# recommended as it will mask a lot of errors for you! | |
28 | +# | |
29 | +ActionController::Base.allow_rescue = false | |
30 | + | |
31 | +# Remove/comment out the lines below if your app doesn't have a database. | |
32 | +# For some databases (like MongoDB and CouchDB) you may need to use :truncation instead. | |
33 | +begin | |
34 | + DatabaseCleaner.strategy = :transaction | |
35 | +rescue NameError | |
36 | + raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it." | |
37 | +end | |
38 | + | |
39 | +# You may also want to configure DatabaseCleaner to use different strategies for certain features and scenarios. | |
40 | +# See the DatabaseCleaner documentation for details. Example: | |
41 | +# | |
42 | +# Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do | |
43 | +# # { :except => [:widgets] } may not do what you expect here | |
44 | +# # as Cucumber::Rails::Database.javascript_strategy overrides | |
45 | +# # this setting. | |
46 | +# DatabaseCleaner.strategy = :truncation | |
47 | +# end | |
48 | +# | |
49 | +# Before('~@no-txn', '~@selenium', '~@culerity', '~@celerity', '~@javascript') do | |
50 | +# DatabaseCleaner.strategy = :transaction | |
51 | +# end | |
52 | +# | |
53 | + | |
54 | +# Possible values are :truncation and :transaction | |
55 | +# The :transaction strategy is faster, but might give you threading problems. | |
56 | +# See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature | |
57 | +Cucumber::Rails::Database.javascript_strategy = :truncation | |
58 | + | ... | ... |
... | ... | @@ -0,0 +1,65 @@ |
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 | |
4 | +# instead of editing this one. Cucumber will automatically load all features/**/*.rb | |
5 | +# files. | |
6 | + | |
7 | + | |
8 | +unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks | |
9 | + | |
10 | +vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first | |
11 | +$LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil? | |
12 | + | |
13 | +begin | |
14 | + require 'cucumber/rake/task' | |
15 | + | |
16 | + namespace :cucumber do | |
17 | + Cucumber::Rake::Task.new({:ok => 'test:prepare'}, 'Run features that should pass') do |t| | |
18 | + t.binary = vendored_cucumber_bin # If nil, the gem's binary is used. | |
19 | + t.fork = true # You may get faster startup if you set this to false | |
20 | + t.profile = 'default' | |
21 | + end | |
22 | + | |
23 | + Cucumber::Rake::Task.new({:wip => 'test:prepare'}, 'Run features that are being worked on') do |t| | |
24 | + t.binary = vendored_cucumber_bin | |
25 | + t.fork = true # You may get faster startup if you set this to false | |
26 | + t.profile = 'wip' | |
27 | + end | |
28 | + | |
29 | + Cucumber::Rake::Task.new({:rerun => 'test:prepare'}, 'Record failing features and run only them if any exist') do |t| | |
30 | + t.binary = vendored_cucumber_bin | |
31 | + t.fork = true # You may get faster startup if you set this to false | |
32 | + t.profile = 'rerun' | |
33 | + end | |
34 | + | |
35 | + desc 'Run all features' | |
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 | |
43 | + end | |
44 | + desc 'Alias for cucumber:ok' | |
45 | + task :cucumber => 'cucumber:ok' | |
46 | + | |
47 | + task :default => :cucumber | |
48 | + | |
49 | + task :features => :cucumber do | |
50 | + STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***" | |
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' | |
58 | +rescue LoadError | |
59 | + desc 'cucumber rake task not available (cucumber not installed)' | |
60 | + task :cucumber do | |
61 | + abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin' | |
62 | + end | |
63 | +end | |
64 | + | |
65 | +end | ... | ... |
... | ... | @@ -0,0 +1,10 @@ |
1 | +#!/usr/bin/env ruby | |
2 | + | |
3 | +vendored_cucumber_bin = Dir["#{File.dirname(__FILE__)}/../vendor/{gems,plugins}/cucumber*/bin/cucumber"].first | |
4 | +if vendored_cucumber_bin | |
5 | + load File.expand_path(vendored_cucumber_bin) | |
6 | +else | |
7 | + require 'rubygems' unless ENV['NO_RUBYGEMS'] | |
8 | + require 'cucumber' | |
9 | + load Cucumber::BINARY | |
10 | +end | ... | ... |