dchelimsky-rspec-rails 1.1.99.5 → 1.1.99.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +7 -1
- data/Manifest.txt +3 -2
- data/Rakefile +1 -1
- data/Upgrade.markdown +51 -0
- data/lib/spec/rails/example/controller_example_group.rb +84 -60
- data/lib/spec/rails/example/helper_example_group.rb +3 -4
- data/lib/spec/rails/example/view_example_group.rb +11 -13
- data/lib/spec/rails/extensions/action_controller/rescue.rb +25 -8
- data/lib/spec/rails/extensions/action_controller/test_case.rb +14 -0
- data/lib/spec/rails/extensions/action_controller/test_response.rb +4 -3
- data/lib/spec/rails/extensions/action_view/base.rb +9 -9
- data/lib/spec/rails/extensions/active_record/base.rb +39 -23
- data/lib/spec/rails/extensions/spec/matchers/have.rb +8 -6
- data/lib/spec/rails/extensions.rb +1 -0
- data/lib/spec/rails/matchers/ar_be_valid.rb +1 -1
- data/lib/spec/rails/matchers/assert_select.rb +1 -1
- data/lib/spec/rails/mocks.rb +1 -1
- data/lib/spec/rails/story_adapter.rb +4 -4
- data/lib/spec/rails/version.rb +1 -1
- data/rspec-rails.gemspec +8 -8
- data/spec/resources/controllers/controller_spec_controller.rb +1 -1
- data/spec/spec/rails/example/controller_example_group_spec.rb +0 -51
- data/spec/spec/rails/example/error_handling_spec.rb +90 -0
- metadata +29 -7
- data/Upgrade.txt +0 -37
- data/spec/spec/rails/extensions/action_controller_rescue_action_spec.rb +0 -57
data/History.txt
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
=== Version 1.1.99.4 (in git)
|
2
2
|
|
3
|
-
IMPORTANT: See Upgrade.
|
3
|
+
IMPORTANT: See Upgrade.markdown for information about upgrading to rspec-rails-1.1.99.4
|
4
4
|
|
5
5
|
IMPORTANT: This release includes the following backwards-compatibility-breaking changes.
|
6
6
|
|
@@ -16,6 +16,11 @@ IMPORTANT: This release includes the following backwards-compatibility-breaking
|
|
16
16
|
|
17
17
|
* see Upgrade.txt for more information
|
18
18
|
|
19
|
+
* deprecations
|
20
|
+
|
21
|
+
* controller.use_rails_error_handling! is deprecated
|
22
|
+
* use rescue_action_in_public! (from rails) instead
|
23
|
+
|
19
24
|
* enhancements
|
20
25
|
|
21
26
|
* Adding status codes to redirect_to matcher (Damian Janowski). Closes #570.
|
@@ -28,6 +33,7 @@ IMPORTANT: This release includes the following backwards-compatibility-breaking
|
|
28
33
|
* redirect_to and render_template matchers can accept controller or response (Joe Ferris). Closes #686.
|
29
34
|
* generated specs use declarative docstrings
|
30
35
|
* rspec_scaffold generator generates layout and stylesheet (per Rails-2.3)
|
36
|
+
* add bypass_rescue for controller specs
|
31
37
|
|
32
38
|
* bug fixes
|
33
39
|
|
data/Manifest.txt
CHANGED
@@ -4,7 +4,7 @@ Manifest.txt
|
|
4
4
|
README.txt
|
5
5
|
Rakefile
|
6
6
|
TODO.txt
|
7
|
-
Upgrade.
|
7
|
+
Upgrade.markdown
|
8
8
|
features/step_definitions/people.rb
|
9
9
|
features/support/env.rb
|
10
10
|
features/transactions/transactions_should_rollback.feature
|
@@ -51,6 +51,7 @@ lib/spec/rails/example/routing_helpers.rb
|
|
51
51
|
lib/spec/rails/example/view_example_group.rb
|
52
52
|
lib/spec/rails/extensions.rb
|
53
53
|
lib/spec/rails/extensions/action_controller/rescue.rb
|
54
|
+
lib/spec/rails/extensions/action_controller/test_case.rb
|
54
55
|
lib/spec/rails/extensions/action_controller/test_response.rb
|
55
56
|
lib/spec/rails/extensions/action_view/base.rb
|
56
57
|
lib/spec/rails/extensions/active_record/base.rb
|
@@ -135,13 +136,13 @@ spec/spec/rails/example/configuration_spec.rb
|
|
135
136
|
spec/spec/rails/example/controller_example_group_spec.rb
|
136
137
|
spec/spec/rails/example/controller_isolation_spec.rb
|
137
138
|
spec/spec/rails/example/cookies_proxy_spec.rb
|
139
|
+
spec/spec/rails/example/error_handling_spec.rb
|
138
140
|
spec/spec/rails/example/example_group_factory_spec.rb
|
139
141
|
spec/spec/rails/example/helper_example_group_spec.rb
|
140
142
|
spec/spec/rails/example/model_example_group_spec.rb
|
141
143
|
spec/spec/rails/example/shared_behaviour_spec.rb
|
142
144
|
spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb
|
143
145
|
spec/spec/rails/example/view_example_group_spec.rb
|
144
|
-
spec/spec/rails/extensions/action_controller_rescue_action_spec.rb
|
145
146
|
spec/spec/rails/extensions/action_view_base_spec.rb
|
146
147
|
spec/spec/rails/extensions/active_record_spec.rb
|
147
148
|
spec/spec/rails/interop/testcase_spec.rb
|
data/Rakefile
CHANGED
@@ -20,7 +20,7 @@ Hoe.new('rspec-rails', Spec::Rails::VERSION::STRING) do |p|
|
|
20
20
|
p.description = "Behaviour Driven Development for Ruby on Rails."
|
21
21
|
p.rubyforge_name = 'rspec'
|
22
22
|
p.developer('RSpec Development Team', 'rspec-devel@rubyforge.org')
|
23
|
-
p.extra_deps = [["dchelimsky-rspec","1.1.99.
|
23
|
+
p.extra_deps = [["dchelimsky-rspec","1.1.99.6"],["rack",">=0.4.0"]]
|
24
24
|
p.extra_dev_deps = [["cucumber",">= 0.1.13"]]
|
25
25
|
p.remote_rdoc_dir = "rspec-rails/#{Spec::Rails::VERSION::STRING}"
|
26
26
|
end
|
data/Upgrade.markdown
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# Upgrade to rspec-rails-1.1.99.x
|
2
|
+
|
3
|
+
## Supported Rails Versions
|
4
|
+
|
5
|
+
This release supports the following versions of rails:
|
6
|
+
|
7
|
+
* 2.0.5
|
8
|
+
* 2.1.2
|
9
|
+
* 2.2.2
|
10
|
+
* 2.3.0
|
11
|
+
|
12
|
+
## update generated files
|
13
|
+
|
14
|
+
Be sure to run "script/generate rspec" and allow the following files to be overwritten:
|
15
|
+
|
16
|
+
* lib/tasks/rspec.rake
|
17
|
+
* script/spec_server
|
18
|
+
|
19
|
+
## controller.use\_rails\_error\_handling! is deprecated
|
20
|
+
|
21
|
+
Use rescue\_action\_in\_public! instead. It comes directly from rails and does
|
22
|
+
exactly the same thing
|
23
|
+
|
24
|
+
## route_for
|
25
|
+
|
26
|
+
After a change to edge rails broke our monkey-patched #route_for method, I
|
27
|
+
decided to just delegate to rails' #assert_generates method. For most cases,
|
28
|
+
this will not present a problem, but for some it might. You'll know if you
|
29
|
+
upgrade and see any newly failing, route-related examples. Here are the things
|
30
|
+
that you might need to change.
|
31
|
+
|
32
|
+
* Make sure IDs are strings
|
33
|
+
|
34
|
+
If you had :id => 1 before, you need to change that to :id => "1"
|
35
|
+
|
36
|
+
#old
|
37
|
+
route_for(:controller => 'things', :action => 'show', :id => 1).should == "/things/1"
|
38
|
+
|
39
|
+
#new
|
40
|
+
route_for(:controller => 'things', :action => 'show', :id => "1").should == "/things/1"
|
41
|
+
|
42
|
+
* Convert paths for non-get methods to hashes
|
43
|
+
|
44
|
+
If you had an example with a route that requires post, put, or delete, you'll
|
45
|
+
need to declare that explicitly.
|
46
|
+
|
47
|
+
#old
|
48
|
+
route_for(:controller => 'things', :action => 'create').should == "/things"
|
49
|
+
|
50
|
+
#new
|
51
|
+
route_for(:controller => 'things', :action => 'create').should == {:path => "/things", :method => :post}
|
@@ -3,21 +3,22 @@ module Spec
|
|
3
3
|
module Example
|
4
4
|
# Controller Examples live in $RAILS_ROOT/spec/controllers/.
|
5
5
|
#
|
6
|
-
# Controller Examples use Spec::Rails::Example::ControllerExampleGroup,
|
7
|
-
# Controllers in two modes, which
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
# isolation and far enough away from
|
12
|
-
# with minimal changes to the existing
|
6
|
+
# Controller Examples use Spec::Rails::Example::ControllerExampleGroup,
|
7
|
+
# which supports running specs for Controllers in two modes, which
|
8
|
+
# represent the tension between the more granular testing common in TDD
|
9
|
+
# and the more high level testing built into rails. BDD sits somewhere
|
10
|
+
# in between: we want to a balance between specs that are close enough
|
11
|
+
# to the code to enable quick fault isolation and far enough away from
|
12
|
+
# the code to enable refactoring with minimal changes to the existing
|
13
|
+
# specs.
|
13
14
|
#
|
14
15
|
# == Isolation mode (default)
|
15
16
|
#
|
16
|
-
# No dependencies on views because none are ever rendered. The
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
17
|
+
# No dependencies on views because none are ever rendered. The benefit
|
18
|
+
# of this mode is that can spec the controller completely independent of
|
19
|
+
# the view, allowing that responsibility to be handled later, or by
|
20
|
+
# somebody else. Combined w/ separate view specs, this also provides
|
21
|
+
# better fault isolation.
|
21
22
|
#
|
22
23
|
# == Integration mode
|
23
24
|
#
|
@@ -28,13 +29,12 @@ module Spec
|
|
28
29
|
# integrate_views
|
29
30
|
# ...
|
30
31
|
#
|
31
|
-
# In this mode, controller specs are run in the same way that
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
# in its benefits.
|
32
|
+
# In this mode, controller specs are run in the same way that rails
|
33
|
+
# functional tests run - one set of tests for both the controllers and
|
34
|
+
# the views. The benefit of this approach is that you get wider coverage
|
35
|
+
# from each spec. Experienced rails developers may find this an easier
|
36
|
+
# approach to begin with, however we encourage you to explore using the
|
37
|
+
# isolation mode and revel in its benefits.
|
38
38
|
#
|
39
39
|
# == Expecting Errors
|
40
40
|
#
|
@@ -44,14 +44,15 @@ module Spec
|
|
44
44
|
class ControllerExampleGroup < FunctionalExampleGroup
|
45
45
|
class << self
|
46
46
|
|
47
|
-
# Use
|
47
|
+
# Use integrate_views to instruct RSpec to render views in
|
48
|
+
# your controller examples in Integration mode.
|
48
49
|
#
|
49
50
|
# describe ThingController do
|
50
51
|
# integrate_views
|
51
52
|
# ...
|
52
53
|
#
|
53
|
-
# See Spec::Rails::Example::ControllerExampleGroup for more
|
54
|
-
# Integration and Isolation modes.
|
54
|
+
# See Spec::Rails::Example::ControllerExampleGroup for more
|
55
|
+
# information about Integration and Isolation modes.
|
55
56
|
def integrate_views(integrate_views = true)
|
56
57
|
@integrate_views = integrate_views
|
57
58
|
end
|
@@ -66,14 +67,18 @@ module Spec
|
|
66
67
|
super
|
67
68
|
end
|
68
69
|
|
69
|
-
def set_description(*args)
|
70
|
+
def set_description(*args) # :nodoc:
|
70
71
|
super
|
71
72
|
if described_class && described_class.ancestors.include?(ActionController::Base)
|
72
73
|
tests described_class
|
73
74
|
end
|
74
75
|
end
|
75
76
|
|
76
|
-
#
|
77
|
+
# When you don't pass a controller to describe, like this:
|
78
|
+
#
|
79
|
+
# describe ThingsController do
|
80
|
+
#
|
81
|
+
# ... then you must provide a controller_name within the context of
|
77
82
|
# your controller specs:
|
78
83
|
#
|
79
84
|
# describe "ThingController" do
|
@@ -94,19 +99,20 @@ module Spec
|
|
94
99
|
end
|
95
100
|
|
96
101
|
unless @controller.class.ancestors.include?(ActionController::Base)
|
97
|
-
Spec::Expectations.fail_with <<-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
102
|
+
Spec::Expectations.fail_with <<-MESSAGE
|
103
|
+
Controller specs need to know what controller is being specified. You can
|
104
|
+
indicate this by passing the controller to describe():
|
105
|
+
|
106
|
+
describe MyController do
|
107
|
+
|
108
|
+
or by declaring the controller's name
|
109
|
+
|
110
|
+
describe "a MyController" do
|
111
|
+
controller_name :my #invokes the MyController
|
112
|
+
end
|
113
|
+
MESSAGE
|
109
114
|
end
|
115
|
+
@controller.extend ControllerInstanceMethods
|
110
116
|
@controller.integrate_views! if @integrate_views
|
111
117
|
@controller.session = session
|
112
118
|
end
|
@@ -118,12 +124,28 @@ module Spec
|
|
118
124
|
@integrate_views = self.class.integrate_views?
|
119
125
|
end
|
120
126
|
|
127
|
+
# Bypasses any error rescues defined with rescue_from. Useful
|
128
|
+
# in cases in which you want to specify errors coming out of
|
129
|
+
# actions that might be caught by a rescue_from clause that is
|
130
|
+
# specified separately.
|
131
|
+
#
|
132
|
+
# Note that this will override the effect of rescue_action_in_public
|
133
|
+
def bypass_rescue
|
134
|
+
if ::Rails::VERSION::STRING >= '2.2'
|
135
|
+
def controller.rescue_action(exception)
|
136
|
+
raise exception
|
137
|
+
end
|
138
|
+
else
|
139
|
+
def controller.rescue_action_with_handler(exception)
|
140
|
+
raise exception
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
121
145
|
protected
|
122
146
|
|
123
147
|
def _assigns_hash_proxy
|
124
|
-
@_assigns_hash_proxy ||= AssignsHashProxy.new
|
125
|
-
@response.template
|
126
|
-
end
|
148
|
+
@_assigns_hash_proxy ||= AssignsHashProxy.new(self) {@response.template}
|
127
149
|
end
|
128
150
|
|
129
151
|
private
|
@@ -146,24 +168,33 @@ module Spec
|
|
146
168
|
end
|
147
169
|
|
148
170
|
def render(*args)
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
171
|
+
@_rendered ? record_render(args[0]) : super
|
172
|
+
end
|
173
|
+
|
174
|
+
private
|
175
|
+
|
176
|
+
def record_render(opts)
|
177
|
+
(@_rendered[:template] ||= opts[:file]) if opts[:file]
|
178
|
+
(@_rendered[:partials][opts[:partial]] += 1) if opts[:partial]
|
179
|
+
end
|
180
|
+
|
181
|
+
# Returned by _pick_template when running controller examples in isolation mode.
|
182
|
+
class PickedTemplate
|
183
|
+
# Do nothing when running controller examples in isolation mode.
|
184
|
+
def render_template(*ignore_args); end
|
185
|
+
# Do nothing when running controller examples in isolation mode.
|
186
|
+
def render_partial(*ignore_args); end
|
156
187
|
end
|
157
188
|
end
|
158
|
-
|
159
|
-
module ControllerInstanceMethods
|
189
|
+
|
190
|
+
module ControllerInstanceMethods # :nodoc:
|
160
191
|
include Spec::Rails::Example::RenderObserver
|
161
192
|
|
162
193
|
# === render(options = nil, extra_options={}, &block)
|
163
194
|
#
|
164
195
|
# This gets added to the controller's singleton meta class,
|
165
196
|
# allowing Controller Examples to run in two modes, freely switching
|
166
|
-
# from
|
197
|
+
# from example group to example group.
|
167
198
|
def render(options=nil, extra_options={}, &block)
|
168
199
|
unless block_given?
|
169
200
|
unless integrate_views?
|
@@ -193,31 +224,24 @@ module Spec
|
|
193
224
|
@integrate_views = true
|
194
225
|
end
|
195
226
|
|
196
|
-
|
227
|
+
private
|
197
228
|
|
198
229
|
def integrate_views?
|
199
230
|
@integrate_views
|
200
231
|
end
|
201
232
|
|
202
233
|
def matching_message_expectation_exists(options)
|
203
|
-
render_proxy.
|
234
|
+
render_proxy.__send__(:__mock_proxy).__send__(:find_matching_expectation, :render, options)
|
204
235
|
end
|
205
236
|
|
206
237
|
def matching_stub_exists(options)
|
207
|
-
render_proxy.
|
238
|
+
render_proxy.__send__(:__mock_proxy).__send__(:find_matching_method_stub, :render, options)
|
208
239
|
end
|
209
240
|
|
210
241
|
end
|
211
242
|
|
212
243
|
Spec::Example::ExampleGroupFactory.register(:controller, self)
|
213
|
-
|
214
|
-
|
215
|
-
# Returned by _pick_template when running controller examples in isolation mode.
|
216
|
-
class PickedTemplate
|
217
|
-
# Do nothing when running controller examples in isolation mode.
|
218
|
-
def render_template(*ignore_args); end
|
219
|
-
# Do nothing when running controller examples in isolation mode.
|
220
|
-
def render_partial(*ignore_args); end
|
244
|
+
|
221
245
|
end
|
222
246
|
end
|
223
247
|
end
|
@@ -155,11 +155,10 @@ module Spec
|
|
155
155
|
|
156
156
|
Spec::Example::ExampleGroupFactory.register(:helper, self)
|
157
157
|
|
158
|
-
|
158
|
+
protected
|
159
|
+
|
159
160
|
def _assigns_hash_proxy
|
160
|
-
@_assigns_hash_proxy ||= AssignsHashProxy.new
|
161
|
-
helper
|
162
|
-
end
|
161
|
+
@_assigns_hash_proxy ||= AssignsHashProxy.new(self) {helper}
|
163
162
|
end
|
164
163
|
|
165
164
|
end
|
@@ -56,14 +56,14 @@ module Spec
|
|
56
56
|
end
|
57
57
|
|
58
58
|
before {ensure_that_flash_and_session_work_properly}
|
59
|
-
after
|
59
|
+
after {ensure_that_base_view_path_is_not_set_across_example_groups}
|
60
60
|
|
61
61
|
def ensure_that_flash_and_session_work_properly #:nodoc:
|
62
|
-
@controller.
|
63
|
-
@controller.
|
64
|
-
@controller.
|
62
|
+
@controller.class.__send__ :public, :flash
|
63
|
+
@controller.__send__ :initialize_template_class, @response
|
64
|
+
@controller.__send__ :assign_shortcuts, @request, @response
|
65
|
+
@controller.__send__ :initialize_current_url
|
65
66
|
@session = @controller.session
|
66
|
-
@controller.class.send :public, :flash
|
67
67
|
end
|
68
68
|
|
69
69
|
def ensure_that_base_view_path_is_not_set_across_example_groups #:nodoc:
|
@@ -134,7 +134,7 @@ module Spec
|
|
134
134
|
defaults = { :layout => false }
|
135
135
|
options = defaults.merge options
|
136
136
|
|
137
|
-
@controller.
|
137
|
+
@controller.__send__(:params).reverse_merge! @request.parameters
|
138
138
|
|
139
139
|
@controller.class.instance_eval %{
|
140
140
|
def controller_path
|
@@ -146,9 +146,9 @@ module Spec
|
|
146
146
|
end
|
147
147
|
}
|
148
148
|
|
149
|
-
@controller.
|
150
|
-
@controller.
|
151
|
-
@controller.
|
149
|
+
@controller.__send__ :forget_variables_added_to_assigns
|
150
|
+
@controller.__send__ :render, options
|
151
|
+
@controller.__send__ :process_cleanup
|
152
152
|
end
|
153
153
|
|
154
154
|
# This provides the template. Use this to set mock
|
@@ -168,11 +168,9 @@ module Spec
|
|
168
168
|
|
169
169
|
Spec::Example::ExampleGroupFactory.register(:view, self)
|
170
170
|
|
171
|
-
|
171
|
+
protected
|
172
172
|
def _assigns_hash_proxy
|
173
|
-
@_assigns_hash_proxy ||= AssignsHashProxy.new
|
174
|
-
@response.template
|
175
|
-
end
|
173
|
+
@_assigns_hash_proxy ||= AssignsHashProxy.new(self) {@response.template}
|
176
174
|
end
|
177
175
|
end
|
178
176
|
|
@@ -1,25 +1,42 @@
|
|
1
1
|
module ActionController
|
2
2
|
module Rescue
|
3
3
|
def use_rails_error_handling!
|
4
|
-
|
5
|
-
|
4
|
+
Kernel.warn <<-WARNING
|
5
|
+
DEPRECATION NOTICE: controller.use_rails_error_handling! is
|
6
|
+
deprecated and will be removed from a future version of
|
7
|
+
rspec-rails.
|
6
8
|
|
9
|
+
Use rescue_action_in_public!, which is defined directly in
|
10
|
+
rails' testing framework, instead.
|
11
|
+
WARNING
|
12
|
+
if Rails::VERSION::STRING =~ /^2\.0/
|
13
|
+
@use_rails_error_handling = true
|
14
|
+
else
|
15
|
+
# anything but 0.0.0.0 - borrowed from rails own rescue_action_in_public!
|
16
|
+
request.remote_addr = '208.77.188.166'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
7
20
|
def use_rails_error_handling?
|
8
21
|
@use_rails_error_handling ||= false
|
9
22
|
end
|
10
23
|
|
11
24
|
protected
|
12
25
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
26
|
+
if Rails::VERSION::STRING =~ /^2\.0/
|
27
|
+
def rescue_action_in_public?
|
28
|
+
request.respond_to?(:rescue_action_in_public?) and request.rescue_action_in_public?
|
29
|
+
end
|
30
|
+
|
31
|
+
def rescue_action_with_handler_with_fast_errors(exception)
|
32
|
+
if (use_rails_error_handling? || rescue_action_in_public?) & !handler_for_rescue(exception)
|
33
|
+
rescue_action_in_public(exception)
|
17
34
|
else
|
18
|
-
|
35
|
+
rescue_action_with_handler_without_fast_errors(exception)
|
19
36
|
end
|
20
37
|
end
|
38
|
+
alias_method_chain :rescue_action_with_handler, :fast_errors
|
21
39
|
end
|
22
|
-
alias_method_chain :rescue_action, :fast_errors
|
23
40
|
|
24
41
|
end
|
25
42
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ActionController
|
2
|
+
class TestCase
|
3
|
+
if Rails::VERSION::STRING =~ /2\.0/
|
4
|
+
# Introduced in Rails 2.1, but we need it for 2.0
|
5
|
+
def rescue_action_in_public!
|
6
|
+
# See rescue.rb in this same directory
|
7
|
+
def request.rescue_action_in_public?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -9,9 +9,10 @@ module ActionController #:nodoc:
|
|
9
9
|
if ::Rails::VERSION::STRING < "2.3"
|
10
10
|
def [](name)
|
11
11
|
Kernel.warn <<-WARNING
|
12
|
-
[](name) as an alias for capture(name) (TestResponse
|
13
|
-
is deprecated and will be
|
14
|
-
rails
|
12
|
+
DEPRECATION NOTICE: [](name) as an alias for capture(name) (TestResponse
|
13
|
+
extension in rspec-rails) is deprecated and will not be defined by rspec-rails
|
14
|
+
when working with rails >= 2.3.0. It will also be removed entirely from
|
15
|
+
a future version of rspec-rails.
|
15
16
|
WARNING
|
16
17
|
capture(name)
|
17
18
|
end
|
@@ -3,8 +3,7 @@ module ActionView #:nodoc:
|
|
3
3
|
include Spec::Rails::Example::RenderObserver
|
4
4
|
cattr_accessor :base_view_path
|
5
5
|
|
6
|
-
|
7
|
-
def render_partial(partial_path, local_assigns = nil, deprecated_local_assigns = nil) #:nodoc:
|
6
|
+
def render_partial_with_base_view_path_handling(partial_path, local_assigns = nil, deprecated_local_assigns = nil) #:nodoc:
|
8
7
|
if partial_path.is_a?(String)
|
9
8
|
unless partial_path.include?("/")
|
10
9
|
unless self.class.base_view_path.nil?
|
@@ -13,21 +12,22 @@ module ActionView #:nodoc:
|
|
13
12
|
end
|
14
13
|
end
|
15
14
|
begin
|
16
|
-
|
15
|
+
render_partial_without_base_view_path_handling(partial_path, local_assigns, deprecated_local_assigns)
|
17
16
|
rescue ArgumentError # edge rails > 2.1 changed render_partial to accept only one arg
|
18
|
-
|
17
|
+
render_partial_without_base_view_path_handling(partial_path)
|
19
18
|
end
|
20
19
|
end
|
20
|
+
alias_method_chain :render_partial, :base_view_path_handling
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
if render_proxy.send(:__mock_proxy).send(:find_matching_expectation, :render, options)
|
22
|
+
def render_with_mock_proxy(options = {}, old_local_assigns = {}, &block)
|
23
|
+
if render_proxy.__send__(:__mock_proxy).__send__(:find_matching_expectation, :render, options)
|
25
24
|
render_proxy.render(options)
|
26
25
|
else
|
27
|
-
unless render_proxy.
|
28
|
-
|
26
|
+
unless render_proxy.__send__(:__mock_proxy).__send__(:find_matching_method_stub, :render, options)
|
27
|
+
render_without_mock_proxy(options, old_local_assigns, &block)
|
29
28
|
end
|
30
29
|
end
|
31
30
|
end
|
31
|
+
alias_method_chain :render, :mock_proxy
|
32
32
|
end
|
33
33
|
end
|
@@ -1,29 +1,45 @@
|
|
1
1
|
if defined?(ActiveRecord::Base)
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
2
|
+
module Spec
|
3
|
+
module Rails
|
4
|
+
module Extensions
|
5
|
+
module ActiveRecord
|
6
|
+
module ClassMethods
|
7
|
+
# :call-seq:
|
8
|
+
# ModelClass.should have(:no).records
|
9
|
+
# ModelClass.should have(1).record
|
10
|
+
# ModelClass.should have(n).records
|
11
|
+
#
|
12
|
+
# Extension to enhance <tt>should have</tt> on AR Model classes
|
13
|
+
def records
|
14
|
+
find(:all)
|
15
|
+
end
|
16
|
+
alias :record :records
|
17
|
+
end
|
15
18
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
module InstanceMethods
|
20
|
+
# :call-seq:
|
21
|
+
# model.should have(:no).errors_on(:attribute)
|
22
|
+
# model.should have(1).error_on(:attribute)
|
23
|
+
# model.should have(n).errors_on(:attribute)
|
24
|
+
#
|
25
|
+
# Extension to enhance <tt>should have</tt> on AR Model instances.
|
26
|
+
# Calls model.valid? in order to prepare the object's errors
|
27
|
+
# object.
|
28
|
+
def errors_on(attribute)
|
29
|
+
self.valid?
|
30
|
+
[self.errors.on(attribute)].flatten.compact
|
31
|
+
end
|
32
|
+
alias :error_on :errors_on
|
33
|
+
end
|
34
|
+
end
|
24
35
|
end
|
25
|
-
|
26
|
-
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
module ActiveRecord #:nodoc:
|
40
|
+
class Base
|
41
|
+
extend Spec::Rails::Extensions::ActiveRecord::ClassMethods
|
42
|
+
include Spec::Rails::Extensions::ActiveRecord::InstanceMethods
|
27
43
|
end
|
28
44
|
end
|
29
45
|
end
|
@@ -3,19 +3,21 @@ require 'spec/matchers/have'
|
|
3
3
|
module Spec #:nodoc:
|
4
4
|
module Matchers #:nodoc:
|
5
5
|
class Have #:nodoc:
|
6
|
-
|
7
|
-
def
|
6
|
+
|
7
|
+
def failure_message_with_errors_on_extensions
|
8
8
|
return "expected #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}, got #{@given}" if @collection_name == :errors_on
|
9
9
|
return "expected #{relativities[@relativity]}#{@expected} error on :#{@args[0]}, got #{@given}" if @collection_name == :error_on
|
10
|
-
return
|
10
|
+
return failure_message_without_errors_on_extensions
|
11
11
|
end
|
12
|
+
alias_method_chain :failure_message, :errors_on_extensions
|
12
13
|
|
13
|
-
|
14
|
-
def description
|
14
|
+
def description_with_errors_on_extensions
|
15
15
|
return "should have #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}" if @collection_name == :errors_on
|
16
16
|
return "should have #{relativities[@relativity]}#{@expected} error on :#{@args[0]}" if @collection_name == :error_on
|
17
|
-
return
|
17
|
+
return description_without_errors_on_extensions
|
18
18
|
end
|
19
|
+
alias_method_chain :description, :errors_on_extensions
|
20
|
+
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -6,5 +6,6 @@ require 'spec/rails/extensions/spec/matchers/have'
|
|
6
6
|
require 'spec/rails/extensions/active_support/test_case'
|
7
7
|
require 'spec/rails/extensions/active_record/base'
|
8
8
|
require 'spec/rails/extensions/action_controller/rescue'
|
9
|
+
require 'spec/rails/extensions/action_controller/test_case'
|
9
10
|
require 'spec/rails/extensions/action_controller/test_response'
|
10
11
|
require 'spec/rails/extensions/action_view/base'
|
data/lib/spec/rails/mocks.rb
CHANGED
@@ -17,7 +17,7 @@ module Spec
|
|
17
17
|
:errors => stub("errors", :count => 0)
|
18
18
|
})
|
19
19
|
m = mock("#{model_class.name}_#{id}", options_and_stubs)
|
20
|
-
m.
|
20
|
+
m.__send__(:__mock_proxy).instance_eval <<-CODE
|
21
21
|
def @target.as_new_record
|
22
22
|
self.stub!(:id).and_return nil
|
23
23
|
self.stub!(:to_param).and_return nil
|
@@ -14,8 +14,8 @@ require 'spec/rails'
|
|
14
14
|
|
15
15
|
Test::Unit.run = true
|
16
16
|
|
17
|
-
ActionController::Integration::Session.
|
18
|
-
ActionController::Integration::Session.
|
17
|
+
ActionController::Integration::Session.__send__ :include, Spec::Matchers
|
18
|
+
ActionController::Integration::Session.__send__ :include, Spec::Rails::Matchers
|
19
19
|
|
20
20
|
class RailsStory < ActionController::IntegrationTest
|
21
21
|
if defined?(ActiveRecord::Base)
|
@@ -43,7 +43,7 @@ class ActiveRecordSafetyListener
|
|
43
43
|
if ActiveRecord::Base.connection.respond_to?(:increment_open_transactions)
|
44
44
|
ActiveRecord::Base.connection.increment_open_transactions
|
45
45
|
else
|
46
|
-
ActiveRecord::Base.
|
46
|
+
ActiveRecord::Base.__send__ :increment_open_transactions
|
47
47
|
end
|
48
48
|
end
|
49
49
|
ActiveRecord::Base.connection.begin_db_transaction
|
@@ -55,7 +55,7 @@ class ActiveRecordSafetyListener
|
|
55
55
|
if ActiveRecord::Base.connection.respond_to?(:decrement_open_transactions)
|
56
56
|
ActiveRecord::Base.connection.decrement_open_transactions
|
57
57
|
else
|
58
|
-
ActiveRecord::Base.
|
58
|
+
ActiveRecord::Base.__send__ :decrement_open_transactions
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
data/lib/spec/rails/version.rb
CHANGED
data/rspec-rails.gemspec
CHANGED
@@ -2,38 +2,38 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rspec-rails}
|
5
|
-
s.version = "1.1.99.
|
5
|
+
s.version = "1.1.99.6"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["RSpec Development Team"]
|
9
|
-
s.date = %q{2009-02-
|
9
|
+
s.date = %q{2009-02-15}
|
10
10
|
s.description = %q{Behaviour Driven Development for Ruby on Rails.}
|
11
11
|
s.email = ["rspec-devel@rubyforge.org"]
|
12
|
-
s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt", "README.txt", "TODO.txt", "
|
13
|
-
s.files = ["History.txt", "License.txt", "Manifest.txt", "README.txt", "Rakefile", "TODO.txt", "Upgrade.
|
12
|
+
s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt", "README.txt", "TODO.txt", "generators/rspec/templates/previous_failures.txt"]
|
13
|
+
s.files = ["History.txt", "License.txt", "Manifest.txt", "README.txt", "Rakefile", "TODO.txt", "Upgrade.markdown", "features/step_definitions/people.rb", "features/support/env.rb", "features/transactions/transactions_should_rollback.feature", "generators/rspec/CHANGES", "generators/rspec/rspec_generator.rb", "generators/rspec/templates/previous_failures.txt", "generators/rspec/templates/rcov.opts", "generators/rspec/templates/rspec.rake", "generators/rspec/templates/script/autospec", "generators/rspec/templates/script/spec", "generators/rspec/templates/script/spec_server", "generators/rspec/templates/spec.opts", "generators/rspec/templates/spec_helper.rb", "generators/rspec_controller/USAGE", "generators/rspec_controller/rspec_controller_generator.rb", "generators/rspec_controller/templates/controller_spec.rb", "generators/rspec_controller/templates/helper_spec.rb", "generators/rspec_controller/templates/view_spec.rb", "generators/rspec_default_values.rb", "generators/rspec_model/USAGE", "generators/rspec_model/rspec_model_generator.rb", "generators/rspec_model/templates/model_spec.rb", "generators/rspec_scaffold/rspec_scaffold_generator.rb", "generators/rspec_scaffold/templates/controller_spec.rb", "generators/rspec_scaffold/templates/edit_erb_spec.rb", "generators/rspec_scaffold/templates/helper_spec.rb", "generators/rspec_scaffold/templates/index_erb_spec.rb", "generators/rspec_scaffold/templates/new_erb_spec.rb", "generators/rspec_scaffold/templates/routing_spec.rb", "generators/rspec_scaffold/templates/show_erb_spec.rb", "init.rb", "lib/autotest/discover.rb", "lib/autotest/rails_rspec.rb", "lib/spec/rails.rb", "lib/spec/rails/example.rb", "lib/spec/rails/example/assigns_hash_proxy.rb", "lib/spec/rails/example/controller_example_group.rb", "lib/spec/rails/example/cookies_proxy.rb", "lib/spec/rails/example/functional_example_group.rb", "lib/spec/rails/example/helper_example_group.rb", "lib/spec/rails/example/model_example_group.rb", "lib/spec/rails/example/render_observer.rb", "lib/spec/rails/example/routing_helpers.rb", "lib/spec/rails/example/view_example_group.rb", "lib/spec/rails/extensions.rb", "lib/spec/rails/extensions/action_controller/rescue.rb", "lib/spec/rails/extensions/action_controller/test_case.rb", "lib/spec/rails/extensions/action_controller/test_response.rb", "lib/spec/rails/extensions/action_view/base.rb", "lib/spec/rails/extensions/active_record/base.rb", "lib/spec/rails/extensions/active_support/test_case.rb", "lib/spec/rails/extensions/spec/matchers/have.rb", "lib/spec/rails/extensions/spec/runner/configuration.rb", "lib/spec/rails/interop/testcase.rb", "lib/spec/rails/matchers.rb", "lib/spec/rails/matchers/ar_be_valid.rb", "lib/spec/rails/matchers/assert_select.rb", "lib/spec/rails/matchers/change.rb", "lib/spec/rails/matchers/have_text.rb", "lib/spec/rails/matchers/include_text.rb", "lib/spec/rails/matchers/redirect_to.rb", "lib/spec/rails/matchers/render_template.rb", "lib/spec/rails/mocks.rb", "lib/spec/rails/spec_server.rb", "lib/spec/rails/story_adapter.rb", "lib/spec/rails/version.rb", "rspec-rails.gemspec", "spec/autotest/mappings_spec.rb", "spec/rails_suite.rb", "spec/resources/controllers/action_view_base_spec_controller.rb", "spec/resources/controllers/application.rb", "spec/resources/controllers/controller_spec_controller.rb", "spec/resources/controllers/redirect_spec_controller.rb", "spec/resources/controllers/render_spec_controller.rb", "spec/resources/controllers/rjs_spec_controller.rb", "spec/resources/helpers/addition_helper.rb", "spec/resources/helpers/explicit_helper.rb", "spec/resources/helpers/more_explicit_helper.rb", "spec/resources/helpers/plugin_application_helper.rb", "spec/resources/helpers/view_spec_helper.rb", "spec/resources/models/animal.rb", "spec/resources/models/person.rb", "spec/resources/models/thing.rb", "spec/resources/views/controller_spec/_partial.rhtml", "spec/resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml", "spec/resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml", "spec/resources/views/controller_spec/action_setting_the_assigns_hash.rhtml", "spec/resources/views/controller_spec/action_with_errors_in_template.rhtml", "spec/resources/views/controller_spec/action_with_template.rhtml", "spec/resources/views/layouts/application.rhtml", "spec/resources/views/layouts/simple.rhtml", "spec/resources/views/objects/_object.html.erb", "spec/resources/views/render_spec/_a_partial.rhtml", "spec/resources/views/render_spec/action_with_alternate_layout.rhtml", "spec/resources/views/render_spec/some_action.html.erb", "spec/resources/views/render_spec/some_action.js.rjs", "spec/resources/views/render_spec/some_action.rjs", "spec/resources/views/rjs_spec/_replacement_partial.rhtml", "spec/resources/views/rjs_spec/hide_div.rjs", "spec/resources/views/rjs_spec/hide_page_element.rjs", "spec/resources/views/rjs_spec/insert_html.rjs", "spec/resources/views/rjs_spec/replace.rjs", "spec/resources/views/rjs_spec/replace_html.rjs", "spec/resources/views/rjs_spec/replace_html_with_partial.rjs", "spec/resources/views/rjs_spec/visual_effect.rjs", "spec/resources/views/rjs_spec/visual_toggle_effect.rjs", "spec/resources/views/tag_spec/no_tags.rhtml", "spec/resources/views/tag_spec/single_div_with_no_attributes.rhtml", "spec/resources/views/tag_spec/single_div_with_one_attribute.rhtml", "spec/resources/views/view_spec/_partial.rhtml", "spec/resources/views/view_spec/_partial_used_twice.rhtml", "spec/resources/views/view_spec/_partial_with_local_variable.rhtml", "spec/resources/views/view_spec/_partial_with_sub_partial.rhtml", "spec/resources/views/view_spec/_spacer.rhtml", "spec/resources/views/view_spec/accessor.rhtml", "spec/resources/views/view_spec/block_helper.rhtml", "spec/resources/views/view_spec/entry_form.rhtml", "spec/resources/views/view_spec/explicit_helper.rhtml", "spec/resources/views/view_spec/foo/show.rhtml", "spec/resources/views/view_spec/implicit_helper.rhtml", "spec/resources/views/view_spec/multiple_helpers.rhtml", "spec/resources/views/view_spec/path_params.html.erb", "spec/resources/views/view_spec/should_not_receive.rhtml", "spec/resources/views/view_spec/template_with_partial.rhtml", "spec/resources/views/view_spec/template_with_partial_using_collection.rhtml", "spec/resources/views/view_spec/template_with_partial_with_array.rhtml", "spec/spec/rails/example/assigns_hash_proxy_spec.rb", "spec/spec/rails/example/configuration_spec.rb", "spec/spec/rails/example/controller_example_group_spec.rb", "spec/spec/rails/example/controller_isolation_spec.rb", "spec/spec/rails/example/cookies_proxy_spec.rb", "spec/spec/rails/example/error_handling_spec.rb", "spec/spec/rails/example/example_group_factory_spec.rb", "spec/spec/rails/example/helper_example_group_spec.rb", "spec/spec/rails/example/model_example_group_spec.rb", "spec/spec/rails/example/shared_behaviour_spec.rb", "spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb", "spec/spec/rails/example/view_example_group_spec.rb", "spec/spec/rails/extensions/action_view_base_spec.rb", "spec/spec/rails/extensions/active_record_spec.rb", "spec/spec/rails/interop/testcase_spec.rb", "spec/spec/rails/matchers/ar_be_valid_spec.rb", "spec/spec/rails/matchers/assert_select_spec.rb", "spec/spec/rails/matchers/errors_on_spec.rb", "spec/spec/rails/matchers/have_text_spec.rb", "spec/spec/rails/matchers/include_text_spec.rb", "spec/spec/rails/matchers/redirect_to_spec.rb", "spec/spec/rails/matchers/render_template_spec.rb", "spec/spec/rails/matchers/should_change_spec.rb", "spec/spec/rails/mocks/ar_classes.rb", "spec/spec/rails/mocks/mock_model_spec.rb", "spec/spec/rails/mocks/stub_model_spec.rb", "spec/spec/rails/sample_modified_fixture.rb", "spec/spec/rails/sample_spec.rb", "spec/spec/rails/spec_server_spec.rb", "spec/spec/rails/spec_spec.rb", "spec/spec_helper.rb"]
|
14
14
|
s.has_rdoc = true
|
15
15
|
s.homepage = %q{http://rspec.info/}
|
16
16
|
s.rdoc_options = ["--main", "README.txt"]
|
17
17
|
s.require_paths = ["lib"]
|
18
18
|
s.rubyforge_project = %q{rspec}
|
19
19
|
s.rubygems_version = %q{1.3.1}
|
20
|
-
s.summary = %q{rspec-rails 1.1.99.
|
20
|
+
s.summary = %q{rspec-rails 1.1.99.6}
|
21
21
|
|
22
22
|
if s.respond_to? :specification_version then
|
23
23
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
24
|
s.specification_version = 2
|
25
25
|
|
26
26
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
27
|
-
s.add_runtime_dependency(%q<dchelimsky-rspec>, ["= 1.1.99.
|
27
|
+
s.add_runtime_dependency(%q<dchelimsky-rspec>, ["= 1.1.99.6"])
|
28
28
|
s.add_runtime_dependency(%q<rack>, [">= 0.4.0"])
|
29
29
|
s.add_development_dependency(%q<cucumber>, [">= 0.1.13"])
|
30
30
|
s.add_development_dependency(%q<hoe>, [">= 1.8.3"])
|
31
31
|
else
|
32
|
-
s.add_dependency(%q<dchelimsky-rspec>, ["= 1.1.99.
|
32
|
+
s.add_dependency(%q<dchelimsky-rspec>, ["= 1.1.99.6"])
|
33
33
|
s.add_dependency(%q<rack>, [">= 0.4.0"])
|
34
34
|
end
|
35
35
|
else
|
36
|
-
s.add_dependency(%q<dchelimsky-rspec>, ["= 1.1.99.
|
36
|
+
s.add_dependency(%q<dchelimsky-rspec>, ["= 1.1.99.6"])
|
37
37
|
s.add_dependency(%q<rack>, [">= 0.4.0"])
|
38
38
|
end
|
39
39
|
end
|
@@ -158,57 +158,6 @@ require 'controller_spec_controller'
|
|
158
158
|
|
159
159
|
end
|
160
160
|
|
161
|
-
describe "with an error that is not rescued in the controller" do
|
162
|
-
context "without rails' error handling" do
|
163
|
-
it "raises the error" do
|
164
|
-
lambda do
|
165
|
-
get 'other_error_action'
|
166
|
-
end.should raise_error(ControllerSpecController::UnRescuedError)
|
167
|
-
end
|
168
|
-
end
|
169
|
-
context "with rails' error handling" do
|
170
|
-
it "does not raise the error" do
|
171
|
-
pending "deal with use_rails_error_handling" do
|
172
|
-
controller.use_rails_error_handling!
|
173
|
-
lambda do
|
174
|
-
get 'other_error_action'
|
175
|
-
end.should_not raise_error
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
describe "with an error that is rescued in the controller" do
|
182
|
-
context "without rails' error handling" do
|
183
|
-
it "does not raise error" do
|
184
|
-
lambda do
|
185
|
-
get 'rescued_error_action'
|
186
|
-
end.should_not raise_error
|
187
|
-
end
|
188
|
-
|
189
|
-
it "executes rescue_from" do
|
190
|
-
get 'rescued_error_action'
|
191
|
-
response.body.should == 'Rescued!'
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
context "with rails' error handling" do
|
196
|
-
before(:each) do
|
197
|
-
controller.use_rails_error_handling!
|
198
|
-
end
|
199
|
-
it "does not raise error" do
|
200
|
-
lambda do
|
201
|
-
get 'rescued_error_action'
|
202
|
-
end.should_not raise_error
|
203
|
-
end
|
204
|
-
|
205
|
-
it "executes rescue_from" do
|
206
|
-
get 'rescued_error_action'
|
207
|
-
response.body.should == 'Rescued!'
|
208
|
-
end
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
161
|
class CustomRouteSpecController < ActionController::Base; end
|
213
162
|
class RspecOnRailsSpecsController < ActionController::Base; end
|
214
163
|
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
require 'controller_spec_controller'
|
3
|
+
|
4
|
+
['integration', 'isolation'].each do |mode|
|
5
|
+
describe "A controller example running in #{mode} mode", :type => :controller do
|
6
|
+
controller_name :controller_spec
|
7
|
+
integrate_views if mode == 'integration'
|
8
|
+
|
9
|
+
describe "without use_rails_error_handling!" do
|
10
|
+
describe "with an error that is *not* rescued" do
|
11
|
+
it "raises the error" do
|
12
|
+
lambda do
|
13
|
+
get 'un_rescued_error_action'
|
14
|
+
end.should raise_error(ControllerSpecController::UnRescuedError)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
describe "with an error that *is* rescued" do
|
18
|
+
it "returns a 200" do
|
19
|
+
get 'rescued_error_action'
|
20
|
+
response.response_code.should == 200
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "with deprecated use_rails_error_handling!" do
|
26
|
+
before(:each) do
|
27
|
+
Kernel.stub!(:warn)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "warns of deprecation" do
|
31
|
+
Kernel.should_receive(:warn).with(/DEPRECATION NOTICE/)
|
32
|
+
controller.use_rails_error_handling!
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "with an error that is *not* rescued" do
|
36
|
+
it "returns the error code" do
|
37
|
+
controller.use_rails_error_handling!
|
38
|
+
get 'un_rescued_error_action'
|
39
|
+
response.response_code.should == 500
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "with an error that *is* rescued" do
|
44
|
+
it "returns a 200" do
|
45
|
+
controller.use_rails_error_handling!
|
46
|
+
get 'rescued_error_action'
|
47
|
+
response.response_code.should == 200
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "with rescue_action_in_public!" do
|
53
|
+
describe "with an error that is *not* rescued" do
|
54
|
+
it "returns the error code" do
|
55
|
+
rescue_action_in_public!
|
56
|
+
get 'un_rescued_error_action'
|
57
|
+
response.response_code.should == 500
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "with an error that *is* rescued" do
|
62
|
+
it "returns a 200" do
|
63
|
+
rescue_action_in_public!
|
64
|
+
get 'rescued_error_action'
|
65
|
+
response.response_code.should == 200
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "with bypass_rescue" do
|
71
|
+
describe "with an error that is *not* rescued" do
|
72
|
+
it "raises the error" do
|
73
|
+
bypass_rescue
|
74
|
+
lambda do
|
75
|
+
get 'un_rescued_error_action'
|
76
|
+
end.should raise_error(ControllerSpecController::UnRescuedError)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "with an error that *is* rescued" do
|
81
|
+
it "raises the error" do
|
82
|
+
bypass_rescue
|
83
|
+
lambda do
|
84
|
+
get 'rescued_error_action'
|
85
|
+
end.should raise_error(ControllerSpecController::RescuedError)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dchelimsky-rspec-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.99.
|
4
|
+
version: 1.1.99.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- RSpec Development Team
|
@@ -9,20 +9,22 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-02-
|
12
|
+
date: 2009-02-15 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: dchelimsky-rspec
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
20
21
|
- - "="
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.1.99.
|
23
|
+
version: 1.1.99.6
|
23
24
|
version:
|
24
25
|
- !ruby/object:Gem::Dependency
|
25
26
|
name: rack
|
27
|
+
type: :runtime
|
26
28
|
version_requirement:
|
27
29
|
version_requirements: !ruby/object:Gem::Requirement
|
28
30
|
requirements:
|
@@ -30,6 +32,26 @@ dependencies:
|
|
30
32
|
- !ruby/object:Gem::Version
|
31
33
|
version: 0.4.0
|
32
34
|
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: cucumber
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.1.13
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: hoe
|
47
|
+
type: :development
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.8.3
|
54
|
+
version:
|
33
55
|
description: Behaviour Driven Development for Ruby on Rails.
|
34
56
|
email:
|
35
57
|
- rspec-devel@rubyforge.org
|
@@ -43,7 +65,6 @@ extra_rdoc_files:
|
|
43
65
|
- Manifest.txt
|
44
66
|
- README.txt
|
45
67
|
- TODO.txt
|
46
|
-
- Upgrade.txt
|
47
68
|
- generators/rspec/templates/previous_failures.txt
|
48
69
|
files:
|
49
70
|
- History.txt
|
@@ -52,7 +73,7 @@ files:
|
|
52
73
|
- README.txt
|
53
74
|
- Rakefile
|
54
75
|
- TODO.txt
|
55
|
-
- Upgrade.
|
76
|
+
- Upgrade.markdown
|
56
77
|
- features/step_definitions/people.rb
|
57
78
|
- features/support/env.rb
|
58
79
|
- features/transactions/transactions_should_rollback.feature
|
@@ -99,6 +120,7 @@ files:
|
|
99
120
|
- lib/spec/rails/example/view_example_group.rb
|
100
121
|
- lib/spec/rails/extensions.rb
|
101
122
|
- lib/spec/rails/extensions/action_controller/rescue.rb
|
123
|
+
- lib/spec/rails/extensions/action_controller/test_case.rb
|
102
124
|
- lib/spec/rails/extensions/action_controller/test_response.rb
|
103
125
|
- lib/spec/rails/extensions/action_view/base.rb
|
104
126
|
- lib/spec/rails/extensions/active_record/base.rb
|
@@ -183,13 +205,13 @@ files:
|
|
183
205
|
- spec/spec/rails/example/controller_example_group_spec.rb
|
184
206
|
- spec/spec/rails/example/controller_isolation_spec.rb
|
185
207
|
- spec/spec/rails/example/cookies_proxy_spec.rb
|
208
|
+
- spec/spec/rails/example/error_handling_spec.rb
|
186
209
|
- spec/spec/rails/example/example_group_factory_spec.rb
|
187
210
|
- spec/spec/rails/example/helper_example_group_spec.rb
|
188
211
|
- spec/spec/rails/example/model_example_group_spec.rb
|
189
212
|
- spec/spec/rails/example/shared_behaviour_spec.rb
|
190
213
|
- spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb
|
191
214
|
- spec/spec/rails/example/view_example_group_spec.rb
|
192
|
-
- spec/spec/rails/extensions/action_controller_rescue_action_spec.rb
|
193
215
|
- spec/spec/rails/extensions/action_view_base_spec.rb
|
194
216
|
- spec/spec/rails/extensions/active_record_spec.rb
|
195
217
|
- spec/spec/rails/interop/testcase_spec.rb
|
@@ -235,6 +257,6 @@ rubyforge_project: rspec
|
|
235
257
|
rubygems_version: 1.2.0
|
236
258
|
signing_key:
|
237
259
|
specification_version: 2
|
238
|
-
summary: rspec-rails 1.1.99.
|
260
|
+
summary: rspec-rails 1.1.99.6
|
239
261
|
test_files: []
|
240
262
|
|
data/Upgrade.txt
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
=== Upgrade to rspec-rails-1.1.99.4
|
2
|
-
|
3
|
-
== update generated files
|
4
|
-
|
5
|
-
Be sure to run "script/generate rspec" and allow the following files to be overwritten:
|
6
|
-
|
7
|
-
* lib/tasks/rspec.rake
|
8
|
-
* script/spec_server
|
9
|
-
|
10
|
-
== route_for
|
11
|
-
|
12
|
-
After a change to edge rails broke our monkey-patched #route_for method, I
|
13
|
-
decided to just delegate to rails' #assert_generates method. For most cases,
|
14
|
-
this will not present a problem, but for some it might. You'll know if you
|
15
|
-
upgrade and see any newly failing, route-related examples. Here are the things
|
16
|
-
that you might need to change.
|
17
|
-
|
18
|
-
* Make sure IDs are strings
|
19
|
-
|
20
|
-
If you had :id => 1 before, you need to change that to :id => "1"
|
21
|
-
|
22
|
-
#old
|
23
|
-
route_for(:controller => 'things', :action => 'show', :id => 1).should == "/things/1"
|
24
|
-
|
25
|
-
#new
|
26
|
-
route_for(:controller => 'things', :action => 'show', :id => "1").should == "/things/1"
|
27
|
-
|
28
|
-
* Convert paths for non-get methods to hashes
|
29
|
-
|
30
|
-
If you had an example with a route that requires post, put, or delete, you'll
|
31
|
-
need to declare that explicitly.
|
32
|
-
|
33
|
-
#old
|
34
|
-
route_for(:controller => 'things', :action => 'create').should == "/things"
|
35
|
-
|
36
|
-
#new
|
37
|
-
route_for(:controller => 'things', :action => 'create').should == {:path => "/things", :method => :post}
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
-
|
3
|
-
module ActionController
|
4
|
-
describe "Rescue", "#rescue_action in default mode" do
|
5
|
-
before(:each) do
|
6
|
-
@fixture = Object.new
|
7
|
-
@fixture.extend ActionController::Rescue
|
8
|
-
def @fixture.rescue_with_handler(exception)
|
9
|
-
false
|
10
|
-
end
|
11
|
-
class << @fixture
|
12
|
-
public :rescue_action
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should raise the passed in exception so examples fail fast" do
|
17
|
-
proc {@fixture.rescue_action(RuntimeError.new("Foobar"))}.should raise_error(RuntimeError, "Foobar")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class RescueOverriddenController < ActionController::Base
|
22
|
-
def rescue_action(error)
|
23
|
-
"successfully overridden"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "Rescue", "#rescue_action, when overridden" do
|
28
|
-
before(:each) do
|
29
|
-
@fixture = RescueOverriddenController.new
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should do whatever the overridden method does" do
|
33
|
-
@fixture.rescue_action(RuntimeError.new("Foobar")).should == "successfully overridden"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class SearchController < ActionController::Base
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "Rescue", "#rescue_action when told to use rails error handling" do
|
41
|
-
before(:each) do
|
42
|
-
@controller = SearchController.new
|
43
|
-
@controller.use_rails_error_handling!
|
44
|
-
class << @controller
|
45
|
-
public :rescue_action
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should use Rails exception handling" do
|
50
|
-
exception = RuntimeError.new("The Error")
|
51
|
-
exception.stub!(:backtrace).and_return(caller)
|
52
|
-
@controller.should_receive(:rescue_action_locally).with(exception)
|
53
|
-
|
54
|
-
@controller.rescue_action(exception)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|