rspec-rails 2.10.1 → 2.11.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog.md +20 -2
- data/README.md +3 -3
- data/features/controller_specs/render_views.feature +1 -1
- data/features/helper_specs/helper_spec.feature +8 -8
- data/features/model_specs/transactional_examples.feature +1 -0
- data/features/routing_specs/README.md +1 -1
- data/features/routing_specs/route_to_matcher.feature +32 -0
- data/lib/generators/rspec.rb +1 -1
- data/lib/generators/rspec/install/install_generator.rb +1 -1
- data/lib/generators/rspec/install/templates/.rspec +1 -1
- data/lib/generators/rspec/install/templates/spec/spec_helper.rb +6 -0
- data/lib/generators/rspec/model/templates/fixtures.yml +1 -1
- data/lib/generators/rspec/scaffold/scaffold_generator.rb +1 -6
- data/lib/generators/rspec/scaffold/templates/controller_spec.rb +1 -1
- data/lib/rspec/rails/matchers.rb +1 -1
- data/lib/rspec/rails/matchers/be_a_new.rb +6 -3
- data/lib/rspec/rails/matchers/be_new_record.rb +1 -2
- data/lib/rspec/rails/matchers/{render_template.rb → have_rendered.rb} +6 -5
- data/lib/rspec/rails/matchers/redirect_to.rb +5 -6
- data/lib/rspec/rails/matchers/routing_matchers.rb +17 -16
- data/lib/rspec/rails/mocks.rb +9 -12
- data/lib/rspec/rails/version.rb +1 -1
- data/spec/generators/rspec/model/model_generator_spec.rb +1 -1
- data/spec/rspec/rails/matchers/have_rendered_spec.rb +93 -0
- data/spec/rspec/rails/matchers/redirect_to_spec.rb +22 -21
- metadata +10 -10
- data/spec/rspec/rails/matchers/render_template_spec.rb +0 -91
data/Changelog.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
### 2.11.0 / 2012-07-07
|
2
|
+
[full changelog](http://github.com/rspec/rspec-rails/compare/v2.10.1...v2.11.0)
|
3
|
+
|
4
|
+
Enhancements
|
5
|
+
|
6
|
+
* The generated `spec/spec_helper.rb` sets `config.order = "random"` so that
|
7
|
+
specs run in random order by default.
|
8
|
+
* rename `render_template` to `have_rendered` (and alias to `render_template`
|
9
|
+
for backward compatibility)
|
10
|
+
|
11
|
+
Bug fixes
|
12
|
+
|
13
|
+
* "uninitialized constant" errors are avoided when using using gems like
|
14
|
+
`rspec-rails-uncommitted` that define `Rspec::Rails` before `rspec-rails`
|
15
|
+
loads (Andy Lindeman)
|
16
|
+
|
1
17
|
### 2.10.1 / 2012-05-03
|
2
18
|
[full changelog](http://github.com/rspec/rspec-rails/compare/v2.10.0...v2.10.1)
|
3
19
|
|
@@ -5,6 +21,8 @@ Bug fixes
|
|
5
21
|
|
6
22
|
* fix regression introduced in 2.10.0 that broke integration with Devise
|
7
23
|
(https://github.com/rspec/rspec-rails/issues/534)
|
24
|
+
* remove generation of helper specs when running the scaffold generator, as
|
25
|
+
Rails already does this (Jack Dempsey)
|
8
26
|
|
9
27
|
### 2.10.0 / 2012-05-03
|
10
28
|
[full changelog](http://github.com/rspec/rspec-rails/compare/v2.9.0...v2.10.0)
|
@@ -24,7 +42,7 @@ Bug fixes
|
|
24
42
|
### 2.9.0 / 2012-03-17
|
25
43
|
[full changelog](http://github.com/rspec/rspec-rails/compare/v2.8.1...v2.9.0)
|
26
44
|
|
27
|
-
|
45
|
+
Enhancements
|
28
46
|
|
29
47
|
* add description method to RouteToMatcher (John Wulff)
|
30
48
|
* Run "db:test:clone_structure" instead of "db:test:prepare" if Active Record's
|
@@ -90,7 +108,7 @@ you'll have to upgrade to rspec-rails-2.8.1 when you upgrade to rails >=
|
|
90
108
|
|
91
109
|
[full changelog](http://github.com/rspec/rspec-rails/compare/v2.6.1...v2.7.0)
|
92
110
|
|
93
|
-
*
|
111
|
+
* Enhancements
|
94
112
|
* `ActiveRecord::Relation` can use the `=~` matcher (Andy Lindeman)
|
95
113
|
* Make generated controller spec more consistent with regard to ids
|
96
114
|
(Brent J. Nordquist)
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# rspec-rails-2
|
1
|
+
# rspec-rails-2 [![Build Status](https://secure.travis-ci.org/rspec/rspec-rails.png?branch=master)](http://travis-ci.org/rspec/rspec-rails) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/rspec/rspec-rails)
|
2
2
|
|
3
3
|
rspec-2 for rails-3 with lightweight extensions to each
|
4
4
|
|
@@ -130,7 +130,7 @@ users like to use extension libraries like FactoryGirl and Capybara:
|
|
130
130
|
```ruby
|
131
131
|
describe "home page" do
|
132
132
|
it "displays the user's username after successful login" do
|
133
|
-
user =
|
133
|
+
user = FactoryGirl.create(:user, :username => "jdoe", :password => "secret")
|
134
134
|
visit "/login"
|
135
135
|
fill_in "Username", :with => "jdoe"
|
136
136
|
fill_in "Password", :with => "secret"
|
@@ -181,7 +181,7 @@ end
|
|
181
181
|
describe WidgetsController do
|
182
182
|
describe "GET index" do
|
183
183
|
it "assigns all widgets to @widgets" do
|
184
|
-
widget =
|
184
|
+
widget = FactoryGirl.create(:widget)
|
185
185
|
get :index
|
186
186
|
assigns(:widgets).should eq([widget])
|
187
187
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
Feature: helper spec
|
2
|
-
|
2
|
+
|
3
3
|
Helper specs live in `spec/helpers`, or any example group with `:type =>
|
4
4
|
:helper`.
|
5
5
|
|
@@ -12,12 +12,12 @@ Feature: helper spec
|
|
12
12
|
on the `helper` object.
|
13
13
|
|
14
14
|
NOTE: helper methods defined in controllers are not included.
|
15
|
-
|
15
|
+
|
16
16
|
Scenario: helper method that returns a value
|
17
17
|
Given a file named "spec/helpers/application_helper_spec.rb" with:
|
18
18
|
"""
|
19
19
|
require "spec_helper"
|
20
|
-
|
20
|
+
|
21
21
|
describe ApplicationHelper do
|
22
22
|
describe "#page_title" do
|
23
23
|
it "returns the default title" do
|
@@ -36,7 +36,7 @@ Feature: helper spec
|
|
36
36
|
"""
|
37
37
|
When I run `rspec spec/helpers/application_helper_spec.rb`
|
38
38
|
Then the examples should all pass
|
39
|
-
|
39
|
+
|
40
40
|
Scenario: helper method that accesses an instance variable
|
41
41
|
Given a file named "spec/helpers/application_helper_spec.rb" with:
|
42
42
|
"""
|
@@ -68,10 +68,10 @@ Feature: helper spec
|
|
68
68
|
require "spec_helper"
|
69
69
|
|
70
70
|
describe WidgetsHelper do
|
71
|
-
describe "#
|
71
|
+
describe "#widget_title" do
|
72
72
|
it "includes the app name" do
|
73
|
-
assign(:title, "This
|
74
|
-
helper.
|
73
|
+
assign(:title, "This Widget")
|
74
|
+
helper.widget_title.should eq("The App: This Widget")
|
75
75
|
end
|
76
76
|
end
|
77
77
|
end
|
@@ -87,7 +87,7 @@ Feature: helper spec
|
|
87
87
|
And a file named "app/helpers/widgets_helper.rb" with:
|
88
88
|
"""
|
89
89
|
module WidgetsHelper
|
90
|
-
def
|
90
|
+
def widget_title
|
91
91
|
"#{app_name}: #{@title}"
|
92
92
|
end
|
93
93
|
end
|
@@ -56,3 +56,35 @@ Feature: route_to matcher
|
|
56
56
|
|
57
57
|
When I run `rspec spec/routing/widgets_routing_spec.rb`
|
58
58
|
Then the output should contain "1 failure"
|
59
|
+
|
60
|
+
Scenario: route spec for a namespaced route with shortcut specifier
|
61
|
+
Given a file named "spec/routing/admin_routing_spec.rb" with:
|
62
|
+
"""
|
63
|
+
require "spec_helper"
|
64
|
+
|
65
|
+
describe "routes for Widgets" do
|
66
|
+
it "routes /admin/accounts to the admin/accounts controller" do
|
67
|
+
get("/admin/accounts").
|
68
|
+
should route_to("admin/accounts#index")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
"""
|
72
|
+
|
73
|
+
When I run `rspec spec/routing/admin_routing_spec.rb`
|
74
|
+
Then the examples should all pass
|
75
|
+
|
76
|
+
Scenario: route spec for a namespaced route with verbose specifier
|
77
|
+
Given a file named "spec/routing/admin_routing_spec.rb" with:
|
78
|
+
"""
|
79
|
+
require "spec_helper"
|
80
|
+
|
81
|
+
describe "routes for Widgets" do
|
82
|
+
it "routes /admin/accounts to the admin/accounts controller" do
|
83
|
+
get("/admin/accounts").
|
84
|
+
should route_to(:controller => "admin/accounts", :action => "index")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
"""
|
88
|
+
|
89
|
+
When I run `rspec spec/routing/admin_routing_spec.rb`
|
90
|
+
Then the examples should all pass
|
data/lib/generators/rspec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rails/generators/named_base'
|
|
2
2
|
|
3
3
|
module Rspec
|
4
4
|
module Generators
|
5
|
-
class Base < Rails::Generators::NamedBase
|
5
|
+
class Base < ::Rails::Generators::NamedBase
|
6
6
|
def self.source_root
|
7
7
|
@_rspec_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'rspec', generator_name, 'templates'))
|
8
8
|
end
|
@@ -1 +1 @@
|
|
1
|
-
--
|
1
|
+
--color
|
@@ -29,4 +29,10 @@ RSpec.configure do |config|
|
|
29
29
|
# automatically. This will be the default behavior in future versions of
|
30
30
|
# rspec-rails.
|
31
31
|
config.infer_base_class_for_anonymous_controllers = false
|
32
|
+
|
33
|
+
# Run specs in random order to surface order dependencies. If you find an
|
34
|
+
# order dependency and want to debug it, you can fix the order by providing
|
35
|
+
# the seed, which is printed after each run.
|
36
|
+
# --seed 1234
|
37
|
+
config.order = "random"
|
32
38
|
end
|
@@ -4,7 +4,7 @@ require 'rails/generators/resource_helpers'
|
|
4
4
|
module Rspec
|
5
5
|
module Generators
|
6
6
|
class ScaffoldGenerator < Base
|
7
|
-
include Rails::Generators::ResourceHelpers
|
7
|
+
include ::Rails::Generators::ResourceHelpers
|
8
8
|
source_paths << File.expand_path("../../helper/templates", __FILE__)
|
9
9
|
argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
|
10
10
|
|
@@ -35,11 +35,6 @@ module Rspec
|
|
35
35
|
copy_view :show
|
36
36
|
end
|
37
37
|
|
38
|
-
# Invoke the helper using the controller name (pluralized)
|
39
|
-
hook_for :helper, :as => :scaffold do |invoked|
|
40
|
-
invoke invoked, [ controller_name ]
|
41
|
-
end
|
42
|
-
|
43
38
|
def generate_routing_spec
|
44
39
|
return unless options[:routing_specs]
|
45
40
|
|
@@ -26,7 +26,7 @@ describe <%= controller_class_name %>Controller do
|
|
26
26
|
def valid_attributes
|
27
27
|
{}
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
# This should return the minimal set of values that should be in the session
|
31
31
|
# in order to pass any filters (e.g. authentication) defined in
|
32
32
|
# <%= controller_class_name %>Controller. Be sure to keep this updated too.
|
data/lib/rspec/rails/matchers.rb
CHANGED
@@ -17,7 +17,7 @@ rescue LoadError
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
require 'rspec/rails/matchers/
|
20
|
+
require 'rspec/rails/matchers/have_rendered'
|
21
21
|
require 'rspec/rails/matchers/redirect_to'
|
22
22
|
require 'rspec/rails/matchers/routing_matchers'
|
23
23
|
require 'rspec/rails/matchers/be_new_record'
|
@@ -1,10 +1,13 @@
|
|
1
1
|
module RSpec::Rails::Matchers
|
2
|
-
class BeANew
|
3
|
-
|
2
|
+
class BeANew < RSpec::Matchers::BuiltIn::BaseMatcher
|
3
|
+
|
4
|
+
def initialize(expected)
|
5
|
+
@expected = expected
|
6
|
+
end
|
4
7
|
|
5
8
|
# @api private
|
6
9
|
def matches?(actual)
|
7
|
-
|
10
|
+
@actual = actual
|
8
11
|
actual.is_a?(expected) && actual.new_record? && attributes_match?(actual)
|
9
12
|
end
|
10
13
|
|
@@ -1,10 +1,9 @@
|
|
1
1
|
module RSpec::Rails::Matchers
|
2
2
|
module RenderTemplate
|
3
|
-
class RenderTemplateMatcher
|
4
|
-
include RSpec::Matchers::BuiltIn::BaseMatcher
|
3
|
+
class RenderTemplateMatcher < RSpec::Matchers::BuiltIn::BaseMatcher
|
5
4
|
|
6
5
|
def initialize(scope, expected, message=nil)
|
7
|
-
|
6
|
+
@expected = Symbol === expected ? expected.to_s : expected
|
8
7
|
@message = message
|
9
8
|
@scope = scope
|
10
9
|
end
|
@@ -31,9 +30,11 @@ module RSpec::Rails::Matchers
|
|
31
30
|
#
|
32
31
|
# @example
|
33
32
|
#
|
34
|
-
# response.should
|
35
|
-
def
|
33
|
+
# response.should have_rendered("new")
|
34
|
+
def have_rendered(options, message=nil)
|
36
35
|
RenderTemplateMatcher.new(self, options, message)
|
37
36
|
end
|
37
|
+
|
38
|
+
alias_method :render_template, :have_rendered
|
38
39
|
end
|
39
40
|
end
|
@@ -1,17 +1,16 @@
|
|
1
1
|
module RSpec::Rails::Matchers
|
2
2
|
module RedirectTo
|
3
|
-
class RedirectTo
|
4
|
-
include RSpec::Matchers::BuiltIn::BaseMatcher
|
3
|
+
class RedirectTo < RSpec::Matchers::BuiltIn::BaseMatcher
|
5
4
|
|
6
5
|
def initialize(scope, expected)
|
7
|
-
|
6
|
+
@expected = expected
|
8
7
|
@scope = scope
|
9
8
|
end
|
10
9
|
|
11
10
|
# @api private
|
12
|
-
def matches?(
|
11
|
+
def matches?(_)
|
13
12
|
match_unless_raises ActiveSupport::TestCase::Assertion do
|
14
|
-
@scope.assert_redirected_to(expected)
|
13
|
+
@scope.assert_redirected_to(@expected)
|
15
14
|
end
|
16
15
|
end
|
17
16
|
|
@@ -22,7 +21,7 @@ module RSpec::Rails::Matchers
|
|
22
21
|
|
23
22
|
# @api private
|
24
23
|
def failure_message_for_should_not
|
25
|
-
"expected not to redirect to #{expected.inspect}, but did"
|
24
|
+
"expected not to redirect to #{@expected.inspect}, but did"
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
@@ -2,33 +2,28 @@ module RSpec::Rails::Matchers
|
|
2
2
|
module RoutingMatchers
|
3
3
|
extend RSpec::Matchers::DSL
|
4
4
|
|
5
|
-
class RouteToMatcher
|
6
|
-
include RSpec::Matchers::BuiltIn::BaseMatcher
|
5
|
+
class RouteToMatcher < RSpec::Matchers::BuiltIn::BaseMatcher
|
7
6
|
|
8
7
|
def initialize(scope, *expected)
|
9
8
|
@scope = scope
|
10
|
-
@
|
9
|
+
@expected = expected[1] || {}
|
11
10
|
if Hash === expected[0]
|
12
|
-
@
|
11
|
+
@expected.merge!(expected[0])
|
13
12
|
else
|
14
13
|
controller, action = expected[0].split('#')
|
15
|
-
@
|
14
|
+
@expected.merge!(:controller => controller, :action => action)
|
16
15
|
end
|
17
16
|
end
|
18
17
|
|
19
|
-
def description
|
20
|
-
"route #{@verb_to_path_map.inspect} to #{@expected_options.inspect}"
|
21
|
-
end
|
22
|
-
|
23
18
|
# @api private
|
24
19
|
def matches?(verb_to_path_map)
|
25
|
-
@verb_to_path_map = verb_to_path_map
|
20
|
+
@actual = @verb_to_path_map = verb_to_path_map
|
26
21
|
# assert_recognizes does not consider ActionController::RoutingError an
|
27
22
|
# assertion failure, so we have to capture that and Assertion here.
|
28
23
|
match_unless_raises ActiveSupport::TestCase::Assertion, ActionController::RoutingError do
|
29
24
|
path, query = *verb_to_path_map.values.first.split('?')
|
30
25
|
@scope.assert_recognizes(
|
31
|
-
@
|
26
|
+
@expected,
|
32
27
|
{:method => verb_to_path_map.keys.first, :path => path},
|
33
28
|
Rack::Utils::parse_query(query)
|
34
29
|
)
|
@@ -39,6 +34,10 @@ module RSpec::Rails::Matchers
|
|
39
34
|
def failure_message_for_should
|
40
35
|
rescued_exception.message
|
41
36
|
end
|
37
|
+
|
38
|
+
def description
|
39
|
+
"route #{@actual.inspect} to #{@expected.inspect}"
|
40
|
+
end
|
42
41
|
end
|
43
42
|
|
44
43
|
# Delegates to `assert_recognizes`. Supports short-hand controller/action
|
@@ -58,8 +57,7 @@ module RSpec::Rails::Matchers
|
|
58
57
|
RouteToMatcher.new(self, *expected)
|
59
58
|
end
|
60
59
|
|
61
|
-
class BeRoutableMatcher
|
62
|
-
include RSpec::Matchers::BuiltIn::BaseMatcher
|
60
|
+
class BeRoutableMatcher < RSpec::Matchers::BuiltIn::BaseMatcher
|
63
61
|
|
64
62
|
def initialize(scope)
|
65
63
|
@scope = scope
|
@@ -67,7 +65,7 @@ module RSpec::Rails::Matchers
|
|
67
65
|
|
68
66
|
# @api private
|
69
67
|
def matches?(path)
|
70
|
-
|
68
|
+
@actual = path
|
71
69
|
match_unless_raises ActionController::RoutingError do
|
72
70
|
@routing_options = @scope.routes.recognize_path(
|
73
71
|
path.values.first, :method => path.keys.first
|
@@ -75,9 +73,12 @@ module RSpec::Rails::Matchers
|
|
75
73
|
end
|
76
74
|
end
|
77
75
|
|
78
|
-
|
76
|
+
def failure_message_for_should
|
77
|
+
"expected #{@actual.inspect} to be routable"
|
78
|
+
end
|
79
|
+
|
79
80
|
def failure_message_for_should_not
|
80
|
-
"expected #{actual.inspect} not to be routable, but it routes to #{@routing_options.inspect}"
|
81
|
+
"expected #{@actual.inspect} not to be routable, but it routes to #{@routing_options.inspect}"
|
81
82
|
end
|
82
83
|
end
|
83
84
|
|
data/lib/rspec/rails/mocks.rb
CHANGED
@@ -114,11 +114,11 @@ EOM
|
|
114
114
|
def @object.is_a?(other)
|
115
115
|
#{model_class}.ancestors.include?(other)
|
116
116
|
end unless #{stubs.has_key?(:is_a?)}
|
117
|
-
|
117
|
+
|
118
118
|
def @object.kind_of?(other)
|
119
119
|
#{model_class}.ancestors.include?(other)
|
120
120
|
end unless #{stubs.has_key?(:kind_of?)}
|
121
|
-
|
121
|
+
|
122
122
|
def @object.instance_of?(other)
|
123
123
|
other == #{model_class}
|
124
124
|
end unless #{stubs.has_key?(:instance_of?)}
|
@@ -130,7 +130,7 @@ EOM
|
|
130
130
|
def @object.respond_to?(method_name, include_private=false)
|
131
131
|
__model_class_has_column?(method_name) ? true : super
|
132
132
|
end unless #{stubs.has_key?(:respond_to?)}
|
133
|
-
|
133
|
+
|
134
134
|
def @object.method_missing(m, *a, &b)
|
135
135
|
respond_to?(m) ? null_object? ? self : nil : super
|
136
136
|
end
|
@@ -138,7 +138,7 @@ EOM
|
|
138
138
|
def @object.class
|
139
139
|
#{model_class}
|
140
140
|
end unless #{stubs.has_key?(:class)}
|
141
|
-
|
141
|
+
|
142
142
|
def @object.to_s
|
143
143
|
"#{model_class.name}_#{to_param}"
|
144
144
|
end unless #{stubs.has_key?(:to_s)}
|
@@ -181,12 +181,12 @@ EOM
|
|
181
181
|
end
|
182
182
|
|
183
183
|
# Creates an instance of `Model` with `to_param` stubbed using a
|
184
|
-
# generated value that is unique to each object
|
184
|
+
# generated value that is unique to each object. If `Model` is an
|
185
185
|
# `ActiveRecord` model, it is prohibited from accessing the database*.
|
186
186
|
#
|
187
|
-
# For each key in `
|
188
|
-
# (determined by
|
189
|
-
# the model does not have a matching attribute, the key/value pair is
|
187
|
+
# For each key in `stubs`, if the model has a matching attribute
|
188
|
+
# (determined by `respond_to?`) it is simply assigned the submitted values.
|
189
|
+
# If the model does not have a matching attribute, the key/value pair is
|
190
190
|
# assigned as a stub return value using RSpec's mocking/stubbing
|
191
191
|
# framework.
|
192
192
|
#
|
@@ -240,7 +240,4 @@ EOM
|
|
240
240
|
end
|
241
241
|
end
|
242
242
|
|
243
|
-
RSpec.
|
244
|
-
c.include RSpec::Rails::Mocks
|
245
|
-
end
|
246
|
-
|
243
|
+
RSpec.configuration.include RSpec::Rails::Mocks
|
data/lib/rspec/rails/version.rb
CHANGED
@@ -33,7 +33,7 @@ describe Rspec::Generators::ModelGenerator do
|
|
33
33
|
describe 'the fixtures' do
|
34
34
|
subject { file('spec/fixtures/posts.yml') }
|
35
35
|
|
36
|
-
it { should contain(Regexp.new('# Read about fixtures at http://
|
36
|
+
it { should contain(Regexp.new('# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html')) }
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
%w[have_rendered render_template].each do |template_expectation|
|
4
|
+
describe template_expectation do
|
5
|
+
include RSpec::Rails::Matchers::RenderTemplate
|
6
|
+
let(:response) { ActionController::TestResponse.new }
|
7
|
+
|
8
|
+
context "given a hash" do
|
9
|
+
it "delegates to assert_template" do
|
10
|
+
self.should_receive(:assert_template).with({:this => "hash"}, "this message")
|
11
|
+
expect("response").to send(template_expectation, {:this => "hash"}, "this message")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "given a string" do
|
16
|
+
it "delegates to assert_template" do
|
17
|
+
self.should_receive(:assert_template).with("this string", "this message")
|
18
|
+
expect("response").to send(template_expectation, "this string", "this message")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "given a symbol" do
|
23
|
+
it "converts to_s and delegates to assert_template" do
|
24
|
+
self.should_receive(:assert_template).with("template_name", "this message")
|
25
|
+
expect("response").to send(template_expectation, :template_name, "this message")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "with should" do
|
30
|
+
context "when assert_template passes" do
|
31
|
+
it "passes" do
|
32
|
+
self.stub!(:assert_template)
|
33
|
+
expect do
|
34
|
+
expect(response).to send(template_expectation, "template_name")
|
35
|
+
end.to_not raise_exception
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "when assert_template fails" do
|
40
|
+
it "uses failure message from assert_template" do
|
41
|
+
self.stub!(:assert_template) do
|
42
|
+
raise ActiveSupport::TestCase::Assertion.new("this message")
|
43
|
+
end
|
44
|
+
expect do
|
45
|
+
expect(response).to send(template_expectation, "template_name")
|
46
|
+
end.to raise_error("this message")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "when fails due to some other exception" do
|
51
|
+
it "raises that exception" do
|
52
|
+
self.stub!(:assert_template) do
|
53
|
+
raise "oops"
|
54
|
+
end
|
55
|
+
expect do
|
56
|
+
expect(response).to send(template_expectation, "template_name")
|
57
|
+
end.to raise_exception("oops")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "with should_not" do
|
63
|
+
context "when assert_template fails" do
|
64
|
+
it "passes" do
|
65
|
+
def assert_template(*)
|
66
|
+
raise ActiveSupport::TestCase::Assertion.new("this message")
|
67
|
+
end
|
68
|
+
expect do
|
69
|
+
expect(response).to_not send(template_expectation, "template_name")
|
70
|
+
end.to_not raise_exception
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "when assert_template passes" do
|
75
|
+
it "fails with custom failure message" do
|
76
|
+
def assert_template(*); end
|
77
|
+
expect do
|
78
|
+
expect(response).to_not send(template_expectation, "template_name")
|
79
|
+
end.to raise_error(/expected not to render \"template_name\", but did/)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "when fails due to some other exception" do
|
84
|
+
it "raises that exception" do
|
85
|
+
def assert_template(*); raise "oops"; end
|
86
|
+
expect do
|
87
|
+
expect(response).to_not send(template_expectation, "template_name")
|
88
|
+
end.to raise_exception("oops")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -6,15 +6,11 @@ describe "redirect_to" do
|
|
6
6
|
|
7
7
|
let(:response) { ActionController::TestResponse.new }
|
8
8
|
|
9
|
-
it "delegates to assert_redirected_to" do
|
10
|
-
self.should_receive(:assert_redirected_to).with("destination")
|
11
|
-
"response".should redirect_to("destination")
|
12
|
-
end
|
13
|
-
|
14
9
|
context "with should" do
|
15
10
|
context "when assert_redirected_to passes" do
|
11
|
+
def assert_redirected_to(*); end
|
12
|
+
|
16
13
|
it "passes" do
|
17
|
-
self.stub!(:assert_redirected_to)
|
18
14
|
expect do
|
19
15
|
response.should redirect_to("destination")
|
20
16
|
end.to_not raise_exception
|
@@ -22,21 +18,23 @@ describe "redirect_to" do
|
|
22
18
|
end
|
23
19
|
|
24
20
|
context "when assert_redirected_to fails" do
|
21
|
+
def assert_redirected_to(*)
|
22
|
+
raise ActiveSupport::TestCase::Assertion.new("this message")
|
23
|
+
end
|
24
|
+
|
25
25
|
it "uses failure message from assert_redirected_to" do
|
26
|
-
self.stub!(:assert_redirected_to) do
|
27
|
-
raise ActiveSupport::TestCase::Assertion.new("this message")
|
28
|
-
end
|
29
26
|
expect do
|
30
27
|
response.should redirect_to("destination")
|
31
|
-
end.to
|
28
|
+
end.to raise_exception("this message")
|
32
29
|
end
|
33
30
|
end
|
34
31
|
|
35
32
|
context "when fails due to some other exception" do
|
33
|
+
def assert_redirected_to(*)
|
34
|
+
raise "oops"
|
35
|
+
end
|
36
|
+
|
36
37
|
it "raises that exception" do
|
37
|
-
self.stub!(:assert_redirected_to) do
|
38
|
-
raise "oops"
|
39
|
-
end
|
40
38
|
expect do
|
41
39
|
response.should redirect_to("destination")
|
42
40
|
end.to raise_exception("oops")
|
@@ -46,10 +44,11 @@ describe "redirect_to" do
|
|
46
44
|
|
47
45
|
context "with should_not" do
|
48
46
|
context "when assert_redirected_to fails" do
|
47
|
+
def assert_redirected_to(*)
|
48
|
+
raise ActiveSupport::TestCase::Assertion.new("this message")
|
49
|
+
end
|
50
|
+
|
49
51
|
it "passes" do
|
50
|
-
self.stub!(:assert_redirected_to) do
|
51
|
-
raise ActiveSupport::TestCase::Assertion.new("this message")
|
52
|
-
end
|
53
52
|
expect do
|
54
53
|
response.should_not redirect_to("destination")
|
55
54
|
end.to_not raise_exception
|
@@ -57,19 +56,21 @@ describe "redirect_to" do
|
|
57
56
|
end
|
58
57
|
|
59
58
|
context "when assert_redirected_to passes" do
|
59
|
+
def assert_redirected_to(*); end
|
60
|
+
|
60
61
|
it "fails with custom failure message" do
|
61
|
-
self.stub!(:assert_redirected_to)
|
62
62
|
expect do
|
63
63
|
response.should_not redirect_to("destination")
|
64
|
-
end.to
|
64
|
+
end.to raise_exception(/expected not to redirect to \"destination\", but did/)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
68
|
context "when fails due to some other exception" do
|
69
|
+
def assert_redirected_to(*)
|
70
|
+
raise "oops"
|
71
|
+
end
|
72
|
+
|
69
73
|
it "raises that exception" do
|
70
|
-
self.stub!(:assert_redirected_to) do
|
71
|
-
raise "oops"
|
72
|
-
end
|
73
74
|
expect do
|
74
75
|
response.should_not redirect_to("destination")
|
75
76
|
end.to raise_exception("oops")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.11.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 2.
|
69
|
+
version: 2.11.0
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,7 +74,7 @@ dependencies:
|
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: 2.
|
77
|
+
version: 2.11.0
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
79
|
name: rake
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -209,9 +209,9 @@ files:
|
|
209
209
|
- lib/rspec/rails/matchers/be_a_new.rb
|
210
210
|
- lib/rspec/rails/matchers/be_new_record.rb
|
211
211
|
- lib/rspec/rails/matchers/have_extension.rb
|
212
|
+
- lib/rspec/rails/matchers/have_rendered.rb
|
212
213
|
- lib/rspec/rails/matchers/redirect_to.rb
|
213
214
|
- lib/rspec/rails/matchers/relation_match_array.rb
|
214
|
-
- lib/rspec/rails/matchers/render_template.rb
|
215
215
|
- lib/rspec/rails/matchers/routing_matchers.rb
|
216
216
|
- lib/rspec/rails/mocks.rb
|
217
217
|
- lib/rspec/rails/module_inclusion.rb
|
@@ -290,9 +290,9 @@ files:
|
|
290
290
|
- spec/rspec/rails/matchers/be_new_record_spec.rb
|
291
291
|
- spec/rspec/rails/matchers/be_routable_spec.rb
|
292
292
|
- spec/rspec/rails/matchers/errors_on_spec.rb
|
293
|
+
- spec/rspec/rails/matchers/have_rendered_spec.rb
|
293
294
|
- spec/rspec/rails/matchers/redirect_to_spec.rb
|
294
295
|
- spec/rspec/rails/matchers/relation_match_array_spec.rb
|
295
|
-
- spec/rspec/rails/matchers/render_template_spec.rb
|
296
296
|
- spec/rspec/rails/matchers/route_to_spec.rb
|
297
297
|
- spec/rspec/rails/mocks/mock_model_spec.rb
|
298
298
|
- spec/rspec/rails/mocks/stub_model_spec.rb
|
@@ -318,7 +318,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
318
318
|
version: '0'
|
319
319
|
segments:
|
320
320
|
- 0
|
321
|
-
hash: -
|
321
|
+
hash: -673310072700950015
|
322
322
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
323
323
|
none: false
|
324
324
|
requirements:
|
@@ -327,13 +327,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
327
327
|
version: '0'
|
328
328
|
segments:
|
329
329
|
- 0
|
330
|
-
hash: -
|
330
|
+
hash: -673310072700950015
|
331
331
|
requirements: []
|
332
332
|
rubyforge_project: rspec
|
333
333
|
rubygems_version: 1.8.24
|
334
334
|
signing_key:
|
335
335
|
specification_version: 3
|
336
|
-
summary: rspec-rails-2.
|
336
|
+
summary: rspec-rails-2.11.0
|
337
337
|
test_files:
|
338
338
|
- features/Autotest.md
|
339
339
|
- features/Generators.md
|
@@ -399,9 +399,9 @@ test_files:
|
|
399
399
|
- spec/rspec/rails/matchers/be_new_record_spec.rb
|
400
400
|
- spec/rspec/rails/matchers/be_routable_spec.rb
|
401
401
|
- spec/rspec/rails/matchers/errors_on_spec.rb
|
402
|
+
- spec/rspec/rails/matchers/have_rendered_spec.rb
|
402
403
|
- spec/rspec/rails/matchers/redirect_to_spec.rb
|
403
404
|
- spec/rspec/rails/matchers/relation_match_array_spec.rb
|
404
|
-
- spec/rspec/rails/matchers/render_template_spec.rb
|
405
405
|
- spec/rspec/rails/matchers/route_to_spec.rb
|
406
406
|
- spec/rspec/rails/mocks/mock_model_spec.rb
|
407
407
|
- spec/rspec/rails/mocks/stub_model_spec.rb
|
@@ -1,91 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe "render_template" do
|
4
|
-
include RSpec::Rails::Matchers::RenderTemplate
|
5
|
-
let(:response) { ActionController::TestResponse.new }
|
6
|
-
|
7
|
-
context "given a hash" do
|
8
|
-
it "delegates to assert_template" do
|
9
|
-
self.should_receive(:assert_template).with({:this => "hash"}, "this message")
|
10
|
-
"response".should render_template({:this => "hash"}, "this message")
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context "given a string" do
|
15
|
-
it "delegates to assert_template" do
|
16
|
-
self.should_receive(:assert_template).with("this string", "this message")
|
17
|
-
"response".should render_template("this string", "this message")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context "given a symbol" do
|
22
|
-
it "converts to_s and delegates to assert_template" do
|
23
|
-
self.should_receive(:assert_template).with("template_name", "this message")
|
24
|
-
"response".should render_template(:template_name, "this message")
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context "with should" do
|
29
|
-
context "when assert_template passes" do
|
30
|
-
it "passes" do
|
31
|
-
self.stub!(:assert_template)
|
32
|
-
expect do
|
33
|
-
response.should render_template("template_name")
|
34
|
-
end.to_not raise_exception
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "when assert_template fails" do
|
39
|
-
it "uses failure message from assert_template" do
|
40
|
-
self.stub!(:assert_template) do
|
41
|
-
raise ActiveSupport::TestCase::Assertion.new("this message")
|
42
|
-
end
|
43
|
-
expect do
|
44
|
-
response.should render_template("template_name")
|
45
|
-
end.to raise_error("this message")
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "when fails due to some other exception" do
|
50
|
-
it "raises that exception" do
|
51
|
-
self.stub!(:assert_template) do
|
52
|
-
raise "oops"
|
53
|
-
end
|
54
|
-
expect do
|
55
|
-
response.should render_template("template_name")
|
56
|
-
end.to raise_exception("oops")
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context "with should_not" do
|
62
|
-
context "when assert_template fails" do
|
63
|
-
it "passes" do
|
64
|
-
def assert_template(*)
|
65
|
-
raise ActiveSupport::TestCase::Assertion.new("this message")
|
66
|
-
end
|
67
|
-
expect do
|
68
|
-
response.should_not render_template("template_name")
|
69
|
-
end.to_not raise_exception
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
context "when assert_template passes" do
|
74
|
-
it "fails with custom failure message" do
|
75
|
-
def assert_template(*); end
|
76
|
-
expect do
|
77
|
-
response.should_not render_template("template_name")
|
78
|
-
end.to raise_error(/expected not to render \"template_name\", but did/)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
context "when fails due to some other exception" do
|
83
|
-
it "raises that exception" do
|
84
|
-
def assert_template(*); raise "oops"; end
|
85
|
-
expect do
|
86
|
-
response.should_not render_template("template_name")
|
87
|
-
end.to raise_exception("oops")
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|