rspec-rails 3.0.0.beta1 → 3.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data.tar.gz.sig +0 -0
  2. data/Changelog.md +46 -0
  3. data/README.md +19 -17
  4. data/features/Generators.md +1 -0
  5. data/features/README.md +7 -15
  6. data/features/controller_specs/anonymous_controller.feature +222 -164
  7. data/lib/generators/rspec/feature/feature_generator.rb +15 -0
  8. data/lib/generators/rspec/feature/templates/feature_spec.rb +5 -0
  9. data/lib/generators/rspec/install/templates/spec/spec_helper.rb.tt +0 -6
  10. data/lib/generators/rspec/integration/integration_generator.rb +0 -11
  11. data/lib/generators/rspec/integration/templates/request_spec.rb +0 -5
  12. data/lib/generators/rspec/model/templates/fixtures.yml +1 -1
  13. data/lib/generators/rspec/scaffold/scaffold_generator.rb +0 -8
  14. data/lib/generators/rspec/scaffold/templates/controller_spec.rb +4 -4
  15. data/lib/generators/rspec/scaffold/templates/edit_spec.rb +0 -9
  16. data/lib/generators/rspec/scaffold/templates/index_spec.rb +0 -7
  17. data/lib/generators/rspec/scaffold/templates/new_spec.rb +0 -9
  18. data/lib/generators/rspec/scaffold/templates/show_spec.rb +0 -7
  19. data/lib/rspec/rails.rb +1 -1
  20. data/lib/rspec/rails/adapters.rb +18 -15
  21. data/lib/rspec/rails/example/controller_example_group.rb +18 -9
  22. data/lib/rspec/rails/example/view_example_group.rb +3 -0
  23. data/lib/rspec/rails/matchers/be_a_new.rb +1 -1
  24. data/lib/rspec/rails/matchers/be_new_record.rb +2 -2
  25. data/lib/rspec/rails/matchers/be_valid.rb +10 -3
  26. data/lib/rspec/rails/matchers/have_rendered.rb +2 -2
  27. data/lib/rspec/rails/matchers/redirect_to.rb +2 -2
  28. data/lib/rspec/rails/matchers/relation_match_array.rb +1 -1
  29. data/lib/rspec/rails/matchers/routing_matchers.rb +7 -3
  30. data/lib/rspec/rails/mocks.rb +50 -26
  31. data/lib/rspec/rails/vendor/capybara.rb +4 -4
  32. data/lib/rspec/rails/version.rb +1 -1
  33. data/spec/generators/rspec/controller/controller_generator_spec.rb +16 -16
  34. data/spec/generators/rspec/feature/feature_generator_spec.rb +43 -0
  35. data/spec/generators/rspec/helper/helper_generator_spec.rb +4 -4
  36. data/spec/generators/rspec/install/install_generator_spec.rb +4 -4
  37. data/spec/generators/rspec/integration/integration_generator_spec.rb +8 -20
  38. data/spec/generators/rspec/mailer/mailer_generator_spec.rb +11 -11
  39. data/spec/generators/rspec/model/model_generator_spec.rb +7 -7
  40. data/spec/generators/rspec/observer/observer_generator_spec.rb +3 -3
  41. data/spec/generators/rspec/scaffold/scaffold_generator_spec.rb +34 -34
  42. data/spec/generators/rspec/view/view_generator_spec.rb +6 -6
  43. data/spec/rspec/rails/assertion_adapter_spec.rb +3 -3
  44. data/spec/rspec/rails/configuration_spec.rb +2 -2
  45. data/spec/rspec/rails/deprecations_spec.rb +1 -1
  46. data/spec/rspec/rails/example/controller_example_group_spec.rb +79 -20
  47. data/spec/rspec/rails/example/feature_example_group_spec.rb +2 -2
  48. data/spec/rspec/rails/example/helper_example_group_spec.rb +12 -12
  49. data/spec/rspec/rails/example/mailer_example_group_spec.rb +3 -3
  50. data/spec/rspec/rails/example/model_example_group_spec.rb +3 -3
  51. data/spec/rspec/rails/example/request_example_group_spec.rb +5 -5
  52. data/spec/rspec/rails/example/routing_example_group_spec.rb +5 -5
  53. data/spec/rspec/rails/example/view_example_group_spec.rb +44 -29
  54. data/spec/rspec/rails/extensions/active_model/errors_on_spec.rb +3 -3
  55. data/spec/rspec/rails/fixture_support_spec.rb +3 -3
  56. data/spec/rspec/rails/matchers/be_a_new_spec.rb +17 -17
  57. data/spec/rspec/rails/matchers/be_new_record_spec.rb +2 -2
  58. data/spec/rspec/rails/matchers/be_routable_spec.rb +8 -8
  59. data/spec/rspec/rails/matchers/be_valid_spec.rb +33 -4
  60. data/spec/rspec/rails/matchers/has_spec.rb +1 -1
  61. data/spec/rspec/rails/matchers/have_rendered_spec.rb +3 -3
  62. data/spec/rspec/rails/matchers/redirect_to_spec.rb +7 -6
  63. data/spec/rspec/rails/matchers/relation_match_array_spec.rb +6 -6
  64. data/spec/rspec/rails/matchers/route_to_spec.rb +21 -21
  65. data/spec/rspec/rails/minitest_lifecycle_adapter_spec.rb +9 -0
  66. data/spec/rspec/rails/mocks/mock_model_spec.rb +95 -73
  67. data/spec/rspec/rails/mocks/stub_model_spec.rb +23 -23
  68. data/spec/rspec/rails/setup_and_teardown_adapter_spec.rb +4 -4
  69. data/spec/rspec/rails/view_rendering_spec.rb +14 -14
  70. data/spec/spec_helper.rb +3 -5
  71. data/spec/support/helpers.rb +15 -1
  72. metadata +112 -46
  73. metadata.gz.sig +0 -0
  74. checksums.yaml +0 -15
  75. checksums.yaml.gz.sig +0 -2
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,31 @@
1
+ ### 3.0.0.beta2 / 2014-02-17
2
+ [full changelog](http://github.com/rspec/rspec-rails/compare/v3.0.0.beta1...v3.0.0.beta2)
3
+
4
+ Bug fixes
5
+
6
+ * Use `__send__` rather than `send` to prevent naming collisions (Bradley Schaefer)
7
+ * Supports Rails 4.1. (Andy Lindeman)
8
+ * Routes are drawn correctly for anonymous controllers with abstract
9
+ parents. (Billy Chan)
10
+ * Loads ActiveSupport properly to support changes in Rails 4.1. (Andy Lindeman)
11
+ * Anonymous controllers inherit from `ActionController::Base` if `ApplicationController`
12
+ is not present. (Jon Rowe)
13
+ * Require `rspec/collection_matchers` when `rspec/rails` is required. (Yuji Nakayama)
14
+
15
+ Enhancements
16
+
17
+ * Improve be_valid matcher for non-ActiveModel::Errors implementations (Ben Hamill)
18
+
19
+ Breaking Changes for 3.0.0:
20
+
21
+ * Removes the `--webrat` option for the request spec generator (Andy Lindeman)
22
+ * Methods from `Capybara::DSL` (e.g., `visit`) are no longer available in
23
+ controller specs. It is more appropriate to use capybara in feature specs
24
+ (`spec/features`) instead. (Andy Lindeman)
25
+ * `infer_base_class_for_anonymous_controllers` is
26
+ enabled by default. (Thomas Holmes)
27
+ * Capybara 2.2.0 or above is required for feature specs. (Andy Lindeman)
28
+
1
29
  ### 3.0.0.beta1 / 2013-11-07
2
30
  [full changelog](http://github.com/rspec/rspec-rails/compare/v2.99.0.beta1...v3.0.0.beta1)
3
31
 
@@ -6,6 +34,24 @@ Breaking Changes for 3.0.0:
6
34
  * Extracts `autotest` and `autotest-rails` support to `rspec-autotest` gem.
7
35
  (Andy Lindeman)
8
36
 
37
+ ### 2.99.0.beta2 / 2014-02-17
38
+ [full changelog](http://github.com/rspec/rspec-rails/compare/v2.99.0.beta1...v2.99.0.beta2)
39
+
40
+ Bug fixes
41
+
42
+ * Use `__send__` rather than `send` to prevent naming collisions (Bradley Schaefer)
43
+ * Supports Rails 4.1. (Andy Lindeman)
44
+ * Loads ActiveSupport properly to support changes in Rails 4.1. (Andy Lindeman)
45
+ * Anonymous controllers inherit from `ActionController::Base` if `ApplicationController`
46
+ is not present. (Jon Rowe)
47
+
48
+ Deprecations
49
+
50
+ * Deprecates the `--webrat` option to the scaffold and request spec generator (Andy Lindeman)
51
+ * Deprecates the use of `Capybara::DSL` (e.g., `visit`) in controller specs.
52
+ It is more appropriate to use capybara in feature specs (`spec/features`)
53
+ instead. (Andy Lindeman)
54
+
9
55
  ### 2.99.0.beta1 / 2013-11-07
10
56
  [full changelog](http://github.com/rspec/rspec-rails/compare/v2.14.0...v2.99.0.beta1)
11
57
 
data/README.md CHANGED
@@ -12,7 +12,7 @@ Add `rspec-rails` to **both** the `:development` and `:test` groups in the
12
12
 
13
13
  ```ruby
14
14
  group :development, :test do
15
- gem 'rspec-rails', '~> 2.0'
15
+ gem 'rspec-rails', '~> 3.0.0.beta'
16
16
  end
17
17
  ```
18
18
 
@@ -189,7 +189,24 @@ FactoryGirl and Capybara seem to be the most widely used. Whether you choose
189
189
  these or other libs, we strongly recommend using something for each of these
190
190
  roles.
191
191
 
192
- # View specs
192
+ ## <a id="feature-specs"></a>Feature Specs
193
+
194
+ Feature specs live in spec/features, and mix in functionality from the
195
+ capybara gem.
196
+
197
+ Feature specs test your application from the outside by simulating a browser.
198
+ capybara is used to manage the simulated browser.
199
+
200
+ To use feature specs, add `capybara` to `Gemfile`:
201
+
202
+ ```ruby
203
+ gem "capybara"
204
+ ```
205
+
206
+ For more information, see the [cucumber scenarios for feature
207
+ specs](https://www.relishapp.com/rspec/rspec-rails/v/3-0/docs/feature-specs/feature-spec).
208
+
209
+ ## View specs
193
210
 
194
211
  View specs live in spec/views, and mix in ActionView::TestCase::Behavior.
195
212
 
@@ -417,21 +434,6 @@ However, you must first clear the task that rspec-rails defined:
417
434
  task("spec").clear
418
435
  ```
419
436
 
420
- ### Webrat and Capybara
421
-
422
- You can choose between webrat or capybara for simulating a browser, automating
423
- a browser, or setting expectations using the matchers they supply. Just add
424
- your preference to the Gemfile:
425
-
426
- ```ruby
427
- gem "webrat"
428
- # ... or ...
429
- gem "capybara"
430
- ```
431
-
432
- See [http://rubydoc.info/gems/rspec-rails/file/Capybara.md](http://rubydoc.info/gems/rspec-rails/file/Capybara.md)
433
- for more info on Capybara integration.
434
-
435
437
  # Contribute
436
438
 
437
439
  See [http://github.com/rspec/rspec-dev](http://github.com/rspec/rspec-dev).
@@ -22,3 +22,4 @@ The same generator pattern is available for all specs:
22
22
  * mailer
23
23
  * observer
24
24
  * integration
25
+ * feature
@@ -1,10 +1,11 @@
1
- rspec-rails extends Rails' built-in testing framework to support rspec examples
2
- for requests, controllers, models, views, helpers, mailers and routing.
1
+ rspec-rails extends Rails' built-in testing framework to support rspec
2
+ examples for requests, controllers, models, views, helpers, mailers and
3
+ routing.
3
4
 
4
- ## Rails-3
5
+ ## Rails
5
6
 
6
- rspec-rails-2 supports rails-3.0.0 and later. For earlier versions of Rails,
7
- you need [rspec-rails-1.3](http://rspec.info).
7
+ rspec-rails 3 supports Rails 3.x and 4.x. For earlier versions of Rails, you
8
+ need [rspec-rails 1](https://github.com/dchelimsky/rspec-rails).
8
9
 
9
10
  ## Install
10
11
 
@@ -23,7 +24,7 @@ This installs the following gems:
23
24
  Add rspec-rails to the :test and :development groups in the Gemfile:
24
25
 
25
26
  group :test, :development do
26
- gem "rspec-rails", "~> 2.4"
27
+ gem 'rspec-rails', '~> 3.0.0.beta'
27
28
  end
28
29
 
29
30
  It needs to be in the :development group to expose generators and rake tasks
@@ -36,15 +37,6 @@ Now you can run:
36
37
  This adds the spec directory and some skeleton files, including a .rspec
37
38
  file.
38
39
 
39
- ## Webrat and Capybara
40
-
41
- You can choose between webrat or capybara for simulating a browser, automating
42
- a browser, or setting expectations using the matchers they supply. Just add
43
- your preference to the Gemfile:
44
-
45
- gem "webrat"
46
- gem "capybara"
47
-
48
40
  ## Issues
49
41
 
50
42
  The documentation for rspec-rails is a work in progress. We'll be adding
@@ -1,23 +1,27 @@
1
1
  Feature: anonymous controller
2
2
 
3
- Use the `controller` method to define an anonymous controller derived from
4
- `ApplicationController`. This is useful for specifying behavior like global
5
- error handling.
3
+ Use the `controller` method to define an anonymous controller
4
+ that will inherit from the described class. This is useful for
5
+ specifying behavior like global error handling.
6
6
 
7
- To specify a different base class, you can pass the class explicitly to the
8
- controller method:
7
+ To specify a different base class you can pass the class explicitly
8
+ to the controller method:
9
9
 
10
10
  controller(BaseController)
11
11
 
12
- You can also configure RSpec to use the described class:
12
+ You can also disable base type inference, in which case anonymous
13
+ controllers will inherit from `ApplicationController` instead of
14
+ the described class by default:
13
15
 
14
- RSpec.configure do |c|
15
- c.infer_base_class_for_anonymous_controllers = true
16
+ Rspec.configure do |c|
17
+ c.infer_base_class_for_anonymous_controllers = false
16
18
  end
17
19
 
18
20
  describe BaseController do
19
21
  controller { ... }
20
- # ^^ creates an anonymous subclass of `BaseController`
22
+ # ^^ would normally create an anonymous subclass of `BaseController`,
23
+ # but since `infer_base_class_for_anonymous_controllers` is disabled,
24
+ # it creates a subclass of `ApplicationController` instead
21
25
 
22
26
  Scenario: specify error handling in ApplicationController
23
27
  Given a file named "spec/controllers/application_controller_spec.rb" with:
@@ -97,10 +101,6 @@ Feature: anonymous controller
97
101
  """ruby
98
102
  require "spec_helper"
99
103
 
100
- RSpec.configure do |c|
101
- c.infer_base_class_for_anonymous_controllers = true
102
- end
103
-
104
104
  class ApplicationController < ActionController::Base; end
105
105
 
106
106
  class ApplicationControllerSubclass < ApplicationController; end
@@ -120,6 +120,39 @@ Feature: anonymous controller
120
120
  When I run `rspec spec`
121
121
  Then the examples should all pass
122
122
 
123
+ Scenario: get name and controller_name from the described class
124
+ Given a file named "spec/controllers/get_name_and_controller_name_from_described_class_spec.rb" with:
125
+ """ruby
126
+ require "spec_helper"
127
+
128
+ class ApplicationController < ActionController::Base; end
129
+ class FoosController < ApplicationController; end
130
+
131
+ describe "FoosController controller_name" do
132
+ controller FoosController do
133
+ def index
134
+ @name = self.class.name
135
+ @controller_name = controller_name
136
+ render :text => "Hello World"
137
+ end
138
+ end
139
+
140
+ before do
141
+ get :index
142
+ end
143
+
144
+ it "gets the class name as described" do
145
+ expect(assigns[:name]).to eq('FoosController')
146
+ end
147
+
148
+ it "gets the controller_name as described" do
149
+ expect(assigns[:controller_name]).to eq('foos')
150
+ end
151
+ end
152
+ """
153
+ When I run `rspec spec`
154
+ Then the examples should all pass
155
+
123
156
  Scenario: invoke around filter in base class
124
157
  Given a file named "spec/controllers/application_controller_around_filter_spec.rb" with:
125
158
  """ruby
@@ -153,226 +186,251 @@ Feature: anonymous controller
153
186
 
154
187
  Scenario: anonymous controllers only create resource routes
155
188
  Given a file named "spec/controllers/application_controller_spec.rb" with:
156
- """ruby
157
- require "spec_helper"
158
-
159
- describe ApplicationController do
160
- controller do
161
- def index
162
- render :text => "index called"
163
- end
189
+ """ruby
190
+ require "spec_helper"
164
191
 
165
- def create
166
- render :text => "create called"
167
- end
192
+ describe ApplicationController do
193
+ controller do
194
+ def index
195
+ render :text => "index called"
196
+ end
168
197
 
169
- def new
170
- render :text => "new called"
171
- end
198
+ def create
199
+ render :text => "create called"
200
+ end
172
201
 
173
- def show
174
- render :text => "show called"
175
- end
202
+ def new
203
+ render :text => "new called"
204
+ end
176
205
 
177
- def edit
178
- render :text => "edit called"
179
- end
206
+ def show
207
+ render :text => "show called"
208
+ end
180
209
 
181
- def update
182
- render :text => "update called"
183
- end
210
+ def edit
211
+ render :text => "edit called"
212
+ end
184
213
 
185
- def destroy
186
- render :text => "destroy called"
187
- end
214
+ def update
215
+ render :text => "update called"
216
+ end
188
217
 
189
- def willerror
190
- render :text => "will not render"
191
- end
192
- end
218
+ def destroy
219
+ render :text => "destroy called"
220
+ end
193
221
 
194
- describe "#index" do
195
- it "responds to GET" do
196
- get :index
197
- expect(response.body).to eq "index called"
222
+ def willerror
223
+ render :text => "will not render"
224
+ end
198
225
  end
199
226
 
200
- it "also responds to POST" do
201
- post :index
202
- expect(response.body).to eq "index called"
203
- end
227
+ describe "#index" do
228
+ it "responds to GET" do
229
+ get :index
230
+ expect(response.body).to eq "index called"
231
+ end
204
232
 
205
- it "also responds to PUT" do
206
- put :index
207
- expect(response.body).to eq "index called"
208
- end
233
+ it "also responds to POST" do
234
+ post :index
235
+ expect(response.body).to eq "index called"
236
+ end
209
237
 
210
- it "also responds to DELETE" do
211
- delete :index
212
- expect(response.body).to eq "index called"
213
- end
214
- end
238
+ it "also responds to PUT" do
239
+ put :index
240
+ expect(response.body).to eq "index called"
241
+ end
215
242
 
216
- describe "#create" do
217
- it "responds to POST" do
218
- post :create
219
- expect(response.body).to eq "create called"
243
+ it "also responds to DELETE" do
244
+ delete :index
245
+ expect(response.body).to eq "index called"
246
+ end
220
247
  end
221
248
 
222
- # And the rest...
223
- %w{get post put delete}.each do |calltype|
224
- it "responds to #{calltype}" do
225
- send(calltype, :create)
249
+ describe "#create" do
250
+ it "responds to POST" do
251
+ post :create
226
252
  expect(response.body).to eq "create called"
227
253
  end
228
- end
229
- end
230
254
 
231
- describe "#new" do
232
- it "responds to GET" do
233
- get :new
234
- expect(response.body).to eq "new called"
255
+ # And the rest...
256
+ %w{get post put delete}.each do |calltype|
257
+ it "responds to #{calltype}" do
258
+ send(calltype, :create)
259
+ expect(response.body).to eq "create called"
260
+ end
261
+ end
235
262
  end
236
263
 
237
- # And the rest...
238
- %w{get post put delete}.each do |calltype|
239
- it "responds to #{calltype}" do
240
- send(calltype, :new)
264
+ describe "#new" do
265
+ it "responds to GET" do
266
+ get :new
241
267
  expect(response.body).to eq "new called"
242
268
  end
243
- end
244
- end
245
-
246
- describe "#edit" do
247
- it "responds to GET" do
248
- get :edit, :id => "anyid"
249
- expect(response.body).to eq "edit called"
250
- end
251
269
 
252
- it "requires the :id parameter" do
253
- expect { get :edit }.to raise_error(ActionController::RoutingError)
270
+ # And the rest...
271
+ %w{get post put delete}.each do |calltype|
272
+ it "responds to #{calltype}" do
273
+ send(calltype, :new)
274
+ expect(response.body).to eq "new called"
275
+ end
276
+ end
254
277
  end
255
278
 
256
- # And the rest...
257
- %w{get post put delete}.each do |calltype|
258
- it "responds to #{calltype}" do
259
- send(calltype, :edit, {:id => "anyid"})
279
+ describe "#edit" do
280
+ it "responds to GET" do
281
+ get :edit, :id => "anyid"
260
282
  expect(response.body).to eq "edit called"
261
283
  end
262
- end
263
- end
264
284
 
265
- describe "#show" do
266
- it "responds to GET" do
267
- get :show, :id => "anyid"
268
- expect(response.body).to eq "show called"
269
- end
285
+ it "requires the :id parameter" do
286
+ expect { get :edit }.to raise_error(ActionController::RoutingError)
287
+ end
270
288
 
271
- it "requires the :id parameter" do
272
- expect { get :show }.to raise_error(ActionController::RoutingError)
289
+ # And the rest...
290
+ %w{get post put delete}.each do |calltype|
291
+ it "responds to #{calltype}" do
292
+ send(calltype, :edit, {:id => "anyid"})
293
+ expect(response.body).to eq "edit called"
294
+ end
295
+ end
273
296
  end
274
297
 
275
- # And the rest...
276
- %w{get post put delete}.each do |calltype|
277
- it "responds to #{calltype}" do
278
- send(calltype, :show, {:id => "anyid"})
298
+ describe "#show" do
299
+ it "responds to GET" do
300
+ get :show, :id => "anyid"
279
301
  expect(response.body).to eq "show called"
280
302
  end
281
- end
282
- end
283
303
 
284
- describe "#update" do
285
- it "responds to PUT" do
286
- put :update, :id => "anyid"
287
- expect(response.body).to eq "update called"
288
- end
304
+ it "requires the :id parameter" do
305
+ expect { get :show }.to raise_error(ActionController::RoutingError)
306
+ end
289
307
 
290
- it "requires the :id parameter" do
291
- expect { put :update }.to raise_error(ActionController::RoutingError)
308
+ # And the rest...
309
+ %w{get post put delete}.each do |calltype|
310
+ it "responds to #{calltype}" do
311
+ send(calltype, :show, {:id => "anyid"})
312
+ expect(response.body).to eq "show called"
313
+ end
314
+ end
292
315
  end
293
316
 
294
- # And the rest...
295
- %w{get post put delete}.each do |calltype|
296
- it "responds to #{calltype}" do
297
- send(calltype, :update, {:id => "anyid"})
317
+ describe "#update" do
318
+ it "responds to PUT" do
319
+ put :update, :id => "anyid"
298
320
  expect(response.body).to eq "update called"
299
321
  end
300
- end
301
- end
302
322
 
303
- describe "#destroy" do
304
- it "responds to DELETE" do
305
- delete :destroy, :id => "anyid"
306
- expect(response.body).to eq "destroy called"
307
- end
323
+ it "requires the :id parameter" do
324
+ expect { put :update }.to raise_error(ActionController::RoutingError)
325
+ end
308
326
 
309
- it "requires the :id parameter" do
310
- expect { delete :destroy }.to raise_error(ActionController::RoutingError)
327
+ # And the rest...
328
+ %w{get post put delete}.each do |calltype|
329
+ it "responds to #{calltype}" do
330
+ send(calltype, :update, {:id => "anyid"})
331
+ expect(response.body).to eq "update called"
332
+ end
333
+ end
311
334
  end
312
335
 
313
- # And the rest...
314
- %w{get post put delete}.each do |calltype|
315
- it "responds to #{calltype}" do
316
- send(calltype, :destroy, {:id => "anyid"})
336
+ describe "#destroy" do
337
+ it "responds to DELETE" do
338
+ delete :destroy, :id => "anyid"
317
339
  expect(response.body).to eq "destroy called"
318
340
  end
341
+
342
+ it "requires the :id parameter" do
343
+ expect { delete :destroy }.to raise_error(ActionController::RoutingError)
344
+ end
345
+
346
+ # And the rest...
347
+ %w{get post put delete}.each do |calltype|
348
+ it "responds to #{calltype}" do
349
+ send(calltype, :destroy, {:id => "anyid"})
350
+ expect(response.body).to eq "destroy called"
351
+ end
352
+ end
319
353
  end
320
- end
321
354
 
322
- describe "#willerror" do
323
- it "cannot be called" do
324
- expect { get :willerror }.to raise_error(ActionController::RoutingError)
355
+ describe "#willerror" do
356
+ it "cannot be called" do
357
+ expect { get :willerror }.to raise_error(ActionController::RoutingError)
358
+ end
325
359
  end
326
360
  end
327
- end
328
- """
361
+ """
329
362
  When I run `rspec spec`
330
363
  Then the examples should all pass
331
364
 
332
365
  Scenario: draw custom routes for anonymous controllers
333
366
  Given a file named "spec/controllers/application_controller_spec.rb" with:
334
- """ruby
335
- require "spec_helper"
367
+ """ruby
368
+ require "spec_helper"
336
369
 
337
- describe ApplicationController do
338
- controller do
339
- def custom
340
- render :text => "custom called"
370
+ describe ApplicationController do
371
+ controller do
372
+ def custom
373
+ render :text => "custom called"
374
+ end
375
+ end
376
+
377
+ specify "a custom action can be requested if routes are drawn manually" do
378
+ routes.draw { get "custom" => "anonymous#custom" }
379
+
380
+ get :custom
381
+ expect(response.body).to eq "custom called"
341
382
  end
342
383
  end
384
+ """
385
+ When I run `rspec spec`
386
+ Then the examples should all pass
343
387
 
344
- specify "a custom action can be requested if routes are drawn manually" do
345
- routes.draw { get "custom" => "anonymous#custom" }
388
+ Scenario: draw custom routes for defined controllers
389
+ Given a file named "spec/controllers/application_controller_spec.rb" with:
390
+ """ruby
391
+ require "spec_helper"
392
+
393
+ class FoosController < ApplicationController; end
394
+
395
+ describe ApplicationController do
396
+ controller FoosController do
397
+ def custom
398
+ render :text => "custom called"
399
+ end
400
+ end
346
401
 
347
- get :custom
348
- expect(response.body).to eq "custom called"
402
+ specify "a custom action can be requested if routes are drawn manually" do
403
+ routes.draw { get "custom" => "foos#custom" }
404
+
405
+ get :custom
406
+ expect(response.body).to eq "custom called"
407
+ end
349
408
  end
350
- end
351
- """
409
+ """
352
410
  When I run `rspec spec`
353
411
  Then the examples should all pass
354
412
 
355
413
  Scenario: refer to application routes in the controller under test
356
414
  Given a file named "spec/controllers/application_controller_spec.rb" with:
357
- """ruby
358
- require "spec_helper"
415
+ """ruby
416
+ require "spec_helper"
359
417
 
360
- Rails.application.routes.draw do
361
- match "/login" => "sessions#new", :as => "login", :via => "get"
362
- end
418
+ Rails.application.routes.draw do
419
+ match "/login" => "sessions#new", :as => "login", :via => "get"
420
+ end
363
421
 
364
- describe ApplicationController do
365
- controller do
366
- def index
367
- redirect_to login_url
422
+ describe ApplicationController do
423
+ controller do
424
+ def index
425
+ redirect_to login_url
426
+ end
368
427
  end
369
- end
370
428
 
371
- it "redirects to the login page" do
372
- get :index
373
- expect(response).to redirect_to("/login")
429
+ it "redirects to the login page" do
430
+ get :index
431
+ expect(response).to redirect_to("/login")
432
+ end
374
433
  end
375
- end
376
- """
434
+ """
377
435
  When I run `rspec spec`
378
436
  Then the examples should all pass