rspec-rails 2.5.0 → 2.6.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. data/.gitignore +9 -4
  2. data/.travis.yml +11 -0
  3. data/README_DEV.md +43 -0
  4. data/Rakefile +54 -27
  5. data/Thorfile +6 -21
  6. data/features/Autotest.md +7 -0
  7. data/features/Changelog.md +17 -2
  8. data/features/Upgrade.md +13 -12
  9. data/features/controller_specs/README.md +18 -10
  10. data/features/controller_specs/anonymous_controller.feature +5 -5
  11. data/features/controller_specs/controller_spec.feature +1 -1
  12. data/features/controller_specs/isolation_from_views.feature +2 -2
  13. data/features/controller_specs/render_views.feature +3 -3
  14. data/features/helper_specs/helper_spec.feature +3 -3
  15. data/features/mailer_specs/url_helpers.feature +2 -2
  16. data/features/matchers/new_record_matcher.feature +2 -2
  17. data/features/matchers/redirect_to_matcher.feature +1 -1
  18. data/features/matchers/render_template_matcher.feature +1 -1
  19. data/features/mocks/mock_model.feature +21 -5
  20. data/features/mocks/stub_model.feature +2 -2
  21. data/features/model_specs/errors_on.feature +1 -1
  22. data/features/model_specs/transactional_examples.feature +10 -5
  23. data/features/routing_specs/README.md +2 -1
  24. data/features/routing_specs/be_routable_matcher.feature +5 -5
  25. data/features/routing_specs/named_routes.feature +1 -1
  26. data/features/routing_specs/route_to_matcher.feature +28 -8
  27. data/features/step_definitions/additional_cli_steps.rb +1 -1
  28. data/features/support/env.rb +7 -18
  29. data/features/view_specs/inferred_controller_path.feature +3 -3
  30. data/features/view_specs/stub_template.feature +2 -2
  31. data/features/view_specs/view_spec.feature +8 -8
  32. data/gemfiles/base.rb +45 -0
  33. data/gemfiles/rails-3-0-stable +7 -0
  34. data/gemfiles/rails-3.0.0 +5 -0
  35. data/gemfiles/rails-3.0.1 +5 -0
  36. data/gemfiles/rails-3.0.2 +5 -0
  37. data/gemfiles/rails-3.0.3 +5 -0
  38. data/gemfiles/rails-3.0.4 +5 -0
  39. data/gemfiles/rails-3.0.5 +5 -0
  40. data/gemfiles/rails-3.0.6 +5 -0
  41. data/gemfiles/rails-master +7 -0
  42. data/lib/generators/rspec/scaffold/scaffold_generator.rb +20 -2
  43. data/lib/generators/rspec/scaffold/templates/controller_spec.rb +23 -23
  44. data/lib/generators/rspec/scaffold/templates/edit_spec.rb +7 -7
  45. data/lib/generators/rspec/scaffold/templates/index_spec.rb +2 -2
  46. data/lib/generators/rspec/scaffold/templates/new_spec.rb +5 -5
  47. data/lib/generators/rspec/scaffold/templates/routing_spec.rb +14 -14
  48. data/lib/generators/rspec/scaffold/templates/show_spec.rb +2 -2
  49. data/lib/rspec/rails/example/controller_example_group.rb +9 -1
  50. data/lib/rspec/rails/example/routing_example_group.rb +1 -0
  51. data/lib/rspec/rails/matchers/routing_matchers.rb +23 -2
  52. data/lib/rspec/rails/mocks.rb +3 -0
  53. data/lib/rspec/rails/tasks/rspec.rake +1 -1
  54. data/lib/rspec/rails/version.rb +1 -1
  55. data/rspec-rails.gemspec +5 -36
  56. data/spec/autotest/rails_rspec2_spec.rb +2 -7
  57. data/spec/rspec/rails/example/controller_example_group_spec.rb +25 -0
  58. data/spec/rspec/rails/matchers/route_to_spec.rb +15 -0
  59. data/spec/rspec/rails/mocks/ar_classes.rb +5 -2
  60. data/spec/rspec/rails/view_rendering_spec.rb +0 -6
  61. data/templates/generate_stuff.rb +2 -1
  62. data/templates/run_specs.rb +2 -2
  63. metadata +54 -77
  64. data/Gemfile-3-0-stable +0 -6
  65. data/Gemfile-3.0.0 +0 -3
  66. data/Gemfile-3.0.3 +0 -3
  67. data/Gemfile-base +0 -38
  68. data/Gemfile-master +0 -5
  69. data/specs.watchr +0 -59
  70. data/templates/Gemfile-base +0 -17
data/.gitignore CHANGED
@@ -1,9 +1,14 @@
1
1
  tmp
2
- pkg
3
- .bundle
4
- rspec-rails-
5
2
  doc
3
+ pkg
6
4
  vendor
7
5
  .bundle
8
- Gemfile.lock
6
+ *.gem
9
7
  Gemfile
8
+ Gemfile.lock
9
+ gemfiles/*.lock
10
+ gemfiles/bin/*
11
+ bin
12
+ .rvmrc
13
+ *.rbc
14
+ .gemfile
@@ -0,0 +1,11 @@
1
+ script: "rake"
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.1
5
+ - 1.9.2
6
+ gemfile:
7
+ - gemfiles/rails-3.0.6
8
+ - gemfiles/rails-3-0-stable
9
+ - gemfiles/rails-master
10
+ env:
11
+ - USE_GIT_REPOS=true
@@ -0,0 +1,43 @@
1
+ # Information for rspec-rails developers
2
+
3
+ rspec-rails lives in a complicated ecosystem. We need to run it against
4
+ multiple versions of rails and multiple versions of Ruby as well. There are
5
+ several tools already available to manage running against multiple versions of
6
+ Ruby (e.g. rvm), and there are even some multi-rails tools (e.g. multi-rails)
7
+ but we haven't found one that does exactly what we need here, so we've rolled
8
+ our own.
9
+
10
+ ## The short version
11
+
12
+ thor rails:use 3.0.6
13
+ rake
14
+
15
+ ## The long version
16
+
17
+ ### thor rails:use
18
+
19
+ The `thor rails:use` task accepts any released version of rails, or either the
20
+ 3-0-stable or master branches.
21
+
22
+ thor rails:use master
23
+ thor rails:use 3-0-stable
24
+ thor rails:use 3.0.6
25
+ thor rails:use 3.0.5
26
+ thor rails:use 3.0.4
27
+ thor rails:use 3.0.3
28
+ thor rails:use 3.0.2
29
+ thor rails:use 3.0.1
30
+ thor rails:use 3.0.0
31
+
32
+ It then does several things:
33
+
34
+ * generates a .gemfile file with the version listed. This is used internally by
35
+ assorted rake tasks.
36
+ * installs the bundle using the appropriate file in the gemfiles directory
37
+ ** this includes binstubs, which are stored in ./gemfiles/bin
38
+ * symlinks the gemfiles/bin directory to ./bin (in the project root) to support
39
+ running bin/rspec from the project root
40
+
41
+ At any time, if you want to change rails versions, run `thor rails:use` with a
42
+ new version number. To play it safe, you probably want to also run `rake
43
+ clobber` to delete all the code generated by the previous rails version.
data/Rakefile CHANGED
@@ -1,14 +1,34 @@
1
- unless File.exist?('./Gemfile')
2
- raise <<-MESSAGE
3
- Could not find a Gemfile. Please run any of:
4
- thor rails:use 3-0-stable
5
- thor rails:use master
6
- thor rails:use 3.0.0
7
- thor rails:use 3.0.3
8
-
9
- And then run 'bundle install'
1
+ unless File.exist?("./.gemfile")
2
+ warn <<-MESSAGE
3
+ =============================================================================
4
+ You must set the version of rails you want to run against. The simplest way
5
+ to accomplish this is to install thor (if you don't already have it) and run:
6
+
7
+ thor rails:use 3.0.6
8
+
9
+ You can use any of the following versions/branches:
10
+
11
+ 3.0.0 .. 3.0.6
12
+ master
13
+ 3-0-stable
14
+
15
+ See the README_DEV.md file for more information.
16
+ =============================================================================
17
+
10
18
  MESSAGE
19
+ exit 1
11
20
  end
21
+
22
+ require 'pathname'
23
+ ENV["BUNDLE_GEMFILE"] ||= begin
24
+ version = if File.exist?("./.gemfile")
25
+ File.read("./.gemfile").chomp
26
+ else
27
+ "rails-3.0.6"
28
+ end
29
+ File.expand_path("../gemfiles/#{version}", __FILE__)
30
+ end
31
+ puts "Using gemfile: #{ENV["BUNDLE_GEMFILE"].gsub(Pathname.new(__FILE__).dirname.to_s,'').sub(/^\//,'')}"
12
32
  require "bundler"
13
33
  Bundler.setup
14
34
  Bundler::GemHelper.install_tasks
@@ -19,8 +39,27 @@ require 'yaml'
19
39
  require 'rake/rdoctask'
20
40
  require 'rspec'
21
41
  require 'rspec/core/rake_task'
22
- require 'cucumber/rake/task'
23
42
 
43
+ begin
44
+ require 'cucumber/rake/task'
45
+
46
+ Cucumber::Rake::Task.new(:cucumber)
47
+
48
+ namespace :cucumber do
49
+ desc "Run cucumber features using rcov"
50
+ Cucumber::Rake::Task.new :rcov => :cleanup_rcov_files do |t|
51
+ t.cucumber_opts = %w{--format progress}
52
+ t.rcov = true
53
+ t.rcov_opts = %[-Ilib -Ispec --exclude "gems/*,features"]
54
+ t.rcov_opts << %[--text-report --sort coverage --aggregate coverage.data]
55
+ end
56
+ end
57
+ rescue LoadError
58
+ puts "unable to load cucumber, some tasks unavailable"
59
+ task :cucumber do
60
+ # no-op
61
+ end
62
+ end
24
63
  task :cleanup_rcov_files do
25
64
  rm_rf 'coverage.data'
26
65
  end
@@ -30,7 +69,6 @@ RSpec::Core::RakeTask.new(:spec) do |t|
30
69
  t.rspec_opts = %w[--color]
31
70
  end
32
71
 
33
- Cucumber::Rake::Task.new(:cucumber)
34
72
 
35
73
  namespace :spec do
36
74
  desc "Run all examples using rcov"
@@ -41,29 +79,20 @@ namespace :spec do
41
79
  end
42
80
  end
43
81
 
44
- namespace :cucumber do
45
- desc "Run cucumber features using rcov"
46
- Cucumber::Rake::Task.new :rcov => :cleanup_rcov_files do |t|
47
- t.cucumber_opts = %w{--format progress}
48
- t.rcov = true
49
- t.rcov_opts = %[-Ilib -Ispec --exclude "gems/*,features"]
50
- t.rcov_opts << %[--text-report --sort coverage --aggregate coverage.data]
51
- end
52
- end
53
-
54
82
  namespace :generate do
55
83
  desc "generate a fresh app with rspec installed"
56
84
  task :app do |t|
57
85
  unless File.directory?('./tmp/example_app')
58
- sh "bundle exec rails new ./tmp/example_app"
59
- sh "cp ./templates/Gemfile-base ./tmp/example_app/"
60
- sh "cp ./Gemfile ./tmp/example_app/"
86
+ sh "bin/rails new ./tmp/example_app"
87
+ bindir = File.expand_path("gemfiles/bin")
88
+ Dir.chdir("./tmp/example_app") do
89
+ sh "ln -s #{bindir}"
90
+ end
61
91
  end
62
92
  end
63
93
 
64
94
  desc "generate a bunch of stuff with generators"
65
95
  task :stuff do
66
- in_example_app "bundle install"
67
96
  in_example_app "rake rails:template LOCATION='../../templates/generate_stuff.rb'"
68
97
  end
69
98
  end
@@ -114,5 +143,3 @@ task :relish, :version do |t, args|
114
143
  end
115
144
 
116
145
  task :default => [:spec, "clobber:app", "generate:app", "generate:stuff", :smoke, :cucumber]
117
-
118
-
data/Thorfile CHANGED
@@ -1,25 +1,10 @@
1
1
  class Rails < Thor
2
- desc "checkout VERSION", "checks it out"
3
- def checkout(version)
4
- puts "***** checking out rails at #{version} ..."
5
- Dir.chdir("vendor/rails") do
6
- `git checkout #{version}`
7
- `rm Gemfile.lock` if File.exist?('Gemfile.lock')
8
- puts `bundle show`
9
- end
10
- end
11
-
12
- desc "fetch", "update vendor/rails"
13
- def fetch
14
- Dir.chdir("vendor/rails") do
15
- `git fetch`
16
- end
17
- end
18
-
19
- desc "use VERSION", "copies the appropriate Gemfile to Gemfile"
2
+ desc "use VERSION", "installs the bundle using gemfiles/rails-VERSION"
20
3
  def use(version)
21
- `cp ./Gemfile-#{version} ./Gemfile`
22
- `rm ./Gemfile.lock`
23
- system "bundle install"
4
+ gemfile = "--gemfile gemfiles/rails-#{version}"
5
+ say `bundle install #{gemfile} --binstubs`
6
+ say `bundle #{gemfile} update rails` unless version =~ /^\d\.\d\.\d$/
7
+ say `ln -s gemfiles/bin` unless File.exist?('bin')
8
+ `echo rails-#{version} > ./.gemfile`
24
9
  end
25
10
  end
@@ -15,3 +15,10 @@ If Bundler is managing any gems for you directly (i.e. you've got `:git` or
15
15
 
16
16
  bundle exec autotest
17
17
 
18
+ If you do, you require Autotest's bundler plugin in a `.autotest` file in the
19
+ project root directory or your home directory:
20
+
21
+ require "autotest/bundler"
22
+
23
+ Now you can just type `autotest`, it should prefix the generated shell command
24
+ with `bundle exec`.
@@ -1,3 +1,18 @@
1
+ ### 2.6.0.rc2 / 2011-04-18
2
+
3
+ [full changelog](http://github.com/rspec/rspec-rails/compare/v2.5.0...v2.6.1.rc2)
4
+
5
+ * Enhancments
6
+ * rails 3 shortcuts for routing specs (Joe Fiorini)
7
+ * support nested resources in generators (Tim McEwan)
8
+ * require 'rspec/rails/mocks' to use `mock_model` without requiring the whole
9
+ rails framework
10
+
11
+ * Bug fixes
12
+ * fix typo in "rake spec:statsetup" (Curtis Schofield)
13
+ * expose named routes in anonymous controller specs (Andy Lindeman)
14
+ * error when generating namespaced scaffold resources (Andy Lindeman)
15
+
1
16
  ### 2.5.0 / 2011-02-05
2
17
 
3
18
  [full changelog](http://github.com/rspec/rspec-rails/compare/v2.4.1...v2.5.0)
@@ -5,11 +20,11 @@
5
20
  * Enhancements
6
21
  * use index_helper instead of table_name when generating specs (Reza
7
22
  Primardiansyah)
8
-
23
+
9
24
  * Bug fixes
10
25
  * fixed bug in which `render_views` in a nested group set the value in its
11
26
  parent group.
12
- * only include MailerExampleGroup when it is defiend (Steve Sloan)
27
+ * only include MailerExampleGroup when it is defined (Steve Sloan)
13
28
  * mock_model.as_null_object.attribute.blank? returns false (Randy Schmidt)
14
29
  * fix typo in request specs (Paco Guzman)
15
30
 
@@ -14,7 +14,7 @@ There were a few changes to the generated `spec/spec_helper.rb` file. We
14
14
  recommend the following:
15
15
 
16
16
  1. set aside a copy of your existing `spec/spec_helper.rb` file.
17
- 2. run `rails generate spec:install`
17
+ 2. run `rails generate rspec:install`
18
18
  3. copy any customizations from your old spec_helper to the new one
19
19
 
20
20
  If you prefer to make the changes manually in the existing spec_helper, here
@@ -28,7 +28,7 @@ is what you need to change:
28
28
  end
29
29
 
30
30
  # rspec-2
31
- require 'rspec/core'
31
+ require 'rspec/rails'
32
32
 
33
33
  RSpec.configure do |config|
34
34
  ...
@@ -72,7 +72,7 @@ action.
72
72
  ### `view.should render_template`
73
73
 
74
74
  Rails changed the way it renders partials, so to set an expectation that a
75
- partial gets rendered, you need
75
+ partial gets rendered, you need
76
76
 
77
77
  render
78
78
  view.should render_template(:partial => "widget/_row")
@@ -85,19 +85,20 @@ that is the subject of a view example:
85
85
 
86
86
  stub_template "widgets/_widget.html.erb" => "This Content"
87
87
 
88
- ### No more `have_tag`
88
+ ### No more `have_tag` or `have_text`
89
89
 
90
- Before Webrat came along, rspec-rails had its own `have_tag` matcher that
91
- wrapped Rails' `assert_select`. Webrat included a replacement for `have_tag` as
92
- well as new matchers (`have_selector` and `have_xpath`), all of which rely on
93
- Nokogiri to do its work, and are far less brittle than RSpec's `have_tag`.
90
+ Before Webrat came along, rspec-rails had its own `have_tag` and `have_text`
91
+ matchers that wrapped Rails' `assert_select`. Webrat included replacements for
92
+ these methods, as well as new matchers (`have_selector` and `have_xpath`), all
93
+ of which rely on Nokogiri to do its work, and are far less brittle than RSpec's
94
+ `have_tag`.
94
95
 
95
96
  Capybara has similar matchers, which will soon be available view specs (they
96
97
  are already available in controller specs with `render_views`).
97
98
 
98
- Given the brittleness of RSpec's `have_tag` matcher and the presence of new
99
- Webrat and Capybara matchers that do a better job, `have_tag` was not included
100
- in rspec-rails-2.
99
+ Given the brittleness of RSpec's `have_tag` and `have_text` matchers and the
100
+ presence of new Webrat and Capybara matchers that do a better job, `have_tag`
101
+ and `have_text` were not included in rspec-rails-2.
101
102
 
102
103
  ## Mocks, stubs, doubles
103
104
 
@@ -106,7 +107,7 @@ in rspec-rails-2.
106
107
  Earlier versions of the view generators generated stub_model with `:new_record?
107
108
  => true`. That is no longer recognized in rspec-rails-2, so you need to change
108
109
  this:
109
-
110
+
110
111
  stub_model(Widget, :new_record? => true)
111
112
 
112
113
  to this:
@@ -21,16 +21,24 @@ To specify outcomes, you can use:
21
21
  * `response.should redirect_to (wraps assert_redirected_to)`
22
22
  * `assigns(:widget).should be_a_new(Widget)`
23
23
 
24
- ## Conventions:
25
-
26
- ### Controller
27
-
28
- * pass the controller being specified to the outermost `describe` method.
29
-
30
- describe AccountController do
31
- # ...
32
-
33
- ### Views
24
+ ## Examples
25
+
26
+ describe TeamsController do
27
+ describe "GET index" do
28
+ it "assigns @teams" do
29
+ team = Team.create
30
+ get :index
31
+ assigns(:teams).should eq([team])
32
+ end
33
+
34
+ it "renders the index template" do
35
+ get :index
36
+ response.should render_template("index")
37
+ end
38
+ end
39
+ end
40
+
41
+ ## Views
34
42
 
35
43
  * by default, views are not rendered. See
36
44
  [views are stubbed by default](controller-specs/views-are-stubbed-by-default) and
@@ -1,8 +1,8 @@
1
1
  Feature: anonymous controller
2
2
 
3
- As a Rails developer using RSpec
4
- In order to specify behaviour of ApplicationController
5
- I want a simple DSL for generating anonymous subclasses
3
+ Use the `controller` method to define an anonymous controller derived from
4
+ ApplicationController, or any other base controller. This is useful for
5
+ specifying behavior like global error handling.
6
6
 
7
7
  Scenario: specify error handling in ApplicationController
8
8
  Given a file named "spec/controllers/application_controller_spec.rb" with:
@@ -36,7 +36,7 @@ Feature: anonymous controller
36
36
  end
37
37
  end
38
38
  """
39
- When I run "rspec spec"
39
+ When I run `rspec spec`
40
40
  Then the examples should all pass
41
41
 
42
42
  Scenario: specify error handling in subclass of ApplicationController
@@ -74,5 +74,5 @@ Feature: anonymous controller
74
74
  end
75
75
  end
76
76
  """
77
- When I run "rspec spec"
77
+ When I run `rspec spec`
78
78
  Then the examples should all pass
@@ -15,5 +15,5 @@ Feature: controller spec
15
15
  end
16
16
  end
17
17
  """
18
- When I run "rspec spec"
18
+ When I run `rspec spec`
19
19
  Then the example should pass
@@ -27,7 +27,7 @@ Feature: views are stubbed by default
27
27
  end
28
28
  end
29
29
  """
30
- When I run "rspec ./spec"
30
+ When I run `rspec spec`
31
31
  Then the examples should all pass
32
32
 
33
33
  Scenario: expect template that is not rendered by controller action (fails)
@@ -44,6 +44,6 @@ Feature: views are stubbed by default
44
44
  end
45
45
  end
46
46
  """
47
- When I run "rspec ./spec"
47
+ When I run `rspec spec`
48
48
  Then the output should contain "1 example, 1 failure"
49
49
 
@@ -19,7 +19,7 @@ Feature: render_views
19
19
  end
20
20
  end
21
21
  """
22
- When I run "rspec spec"
22
+ When I run `rspec spec`
23
23
  Then the examples should all pass
24
24
 
25
25
  Scenario: render_views on and off in nested groups
@@ -71,7 +71,7 @@ Feature: render_views
71
71
  end
72
72
  end
73
73
  """
74
- When I run "rspec spec --format documentation"
74
+ When I run `rspec spec --format documentation`
75
75
  Then the output should contain:
76
76
  """
77
77
  WidgetsController
@@ -109,6 +109,6 @@ Feature: render_views
109
109
  end
110
110
  end
111
111
  """
112
- When I run "rspec spec"
112
+ When I run `rspec spec`
113
113
  Then the examples should all pass
114
114