richzhou-rspec-rails 1.3.4

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.
Files changed (170) hide show
  1. data/.document +7 -0
  2. data/.gitignore +8 -0
  3. data/Contribute.rdoc +4 -0
  4. data/Gemfile +4 -0
  5. data/History.rdoc +321 -0
  6. data/License.txt +33 -0
  7. data/Manifest.txt +165 -0
  8. data/README.rdoc +48 -0
  9. data/Rakefile +12 -0
  10. data/TODO.txt +17 -0
  11. data/Upgrade.rdoc +148 -0
  12. data/generators/integration_spec/integration_spec_generator.rb +10 -0
  13. data/generators/integration_spec/templates/integration_spec.rb +4 -0
  14. data/generators/rspec/CHANGES +1 -0
  15. data/generators/rspec/rspec_generator.rb +72 -0
  16. data/generators/rspec/templates/previous_failures.txt +0 -0
  17. data/generators/rspec/templates/rcov.opts +2 -0
  18. data/generators/rspec/templates/rspec.rake +146 -0
  19. data/generators/rspec/templates/script/autospec +6 -0
  20. data/generators/rspec/templates/script/spec +10 -0
  21. data/generators/rspec/templates/spec.opts +4 -0
  22. data/generators/rspec/templates/spec_helper.rb +54 -0
  23. data/generators/rspec_controller/USAGE +33 -0
  24. data/generators/rspec_controller/rspec_controller_generator.rb +47 -0
  25. data/generators/rspec_controller/templates/controller_spec.rb +25 -0
  26. data/generators/rspec_controller/templates/helper_spec.rb +11 -0
  27. data/generators/rspec_controller/templates/view_spec.rb +12 -0
  28. data/generators/rspec_default_values.rb +28 -0
  29. data/generators/rspec_model/USAGE +18 -0
  30. data/generators/rspec_model/rspec_model_generator.rb +35 -0
  31. data/generators/rspec_model/templates/model_spec.rb +13 -0
  32. data/generators/rspec_scaffold/rspec_scaffold_generator.rb +154 -0
  33. data/generators/rspec_scaffold/templates/controller_spec.rb +131 -0
  34. data/generators/rspec_scaffold/templates/edit_erb_spec.rb +25 -0
  35. data/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
  36. data/generators/rspec_scaffold/templates/index_erb_spec.rb +27 -0
  37. data/generators/rspec_scaffold/templates/new_erb_spec.rb +25 -0
  38. data/generators/rspec_scaffold/templates/routing_spec.rb +33 -0
  39. data/generators/rspec_scaffold/templates/show_erb_spec.rb +22 -0
  40. data/init.rb +9 -0
  41. data/lib/autotest/discover.rb +5 -0
  42. data/lib/autotest/rails_rspec.rb +76 -0
  43. data/lib/spec/rails.rb +26 -0
  44. data/lib/spec/rails/example.rb +48 -0
  45. data/lib/spec/rails/example/assigns_hash_proxy.rb +39 -0
  46. data/lib/spec/rails/example/controller_example_group.rb +285 -0
  47. data/lib/spec/rails/example/cookies_proxy.rb +29 -0
  48. data/lib/spec/rails/example/functional_example_group.rb +106 -0
  49. data/lib/spec/rails/example/helper_example_group.rb +153 -0
  50. data/lib/spec/rails/example/integration_example_group.rb +16 -0
  51. data/lib/spec/rails/example/model_example_group.rb +15 -0
  52. data/lib/spec/rails/example/render_observer.rb +82 -0
  53. data/lib/spec/rails/example/routing_example_group.rb +16 -0
  54. data/lib/spec/rails/example/routing_helpers.rb +66 -0
  55. data/lib/spec/rails/example/view_example_group.rb +203 -0
  56. data/lib/spec/rails/extensions.rb +11 -0
  57. data/lib/spec/rails/extensions/action_controller/rescue.rb +42 -0
  58. data/lib/spec/rails/extensions/action_controller/test_case.rb +16 -0
  59. data/lib/spec/rails/extensions/action_controller/test_response.rb +21 -0
  60. data/lib/spec/rails/extensions/action_view/base.rb +35 -0
  61. data/lib/spec/rails/extensions/active_record/base.rb +45 -0
  62. data/lib/spec/rails/extensions/active_support/test_case.rb +7 -0
  63. data/lib/spec/rails/extensions/spec/matchers/have.rb +23 -0
  64. data/lib/spec/rails/extensions/spec/runner/configuration.rb +45 -0
  65. data/lib/spec/rails/interop/testcase.rb +14 -0
  66. data/lib/spec/rails/matchers.rb +32 -0
  67. data/lib/spec/rails/matchers/ar_be_valid.rb +27 -0
  68. data/lib/spec/rails/matchers/assert_select.rb +180 -0
  69. data/lib/spec/rails/matchers/change.rb +13 -0
  70. data/lib/spec/rails/matchers/have_text.rb +57 -0
  71. data/lib/spec/rails/matchers/include_text.rb +54 -0
  72. data/lib/spec/rails/matchers/redirect_to.rb +126 -0
  73. data/lib/spec/rails/matchers/render_template.rb +129 -0
  74. data/lib/spec/rails/matchers/route_to.rb +149 -0
  75. data/lib/spec/rails/mocks.rb +140 -0
  76. data/lib/spec/rails/version.rb +16 -0
  77. data/rspec-rails.gemspec +25 -0
  78. data/spec/autotest/mappings_spec.rb +86 -0
  79. data/spec/rails_suite.rb +7 -0
  80. data/spec/resources/controllers/action_view_base_spec_controller.rb +2 -0
  81. data/spec/resources/controllers/application.rb +9 -0
  82. data/spec/resources/controllers/controller_spec_controller.rb +127 -0
  83. data/spec/resources/controllers/example.txt +1 -0
  84. data/spec/resources/controllers/redirect_spec_controller.rb +70 -0
  85. data/spec/resources/controllers/render_spec_controller.rb +34 -0
  86. data/spec/resources/controllers/rjs_spec_controller.rb +58 -0
  87. data/spec/resources/helpers/addition_helper.rb +5 -0
  88. data/spec/resources/helpers/explicit_helper.rb +46 -0
  89. data/spec/resources/helpers/more_explicit_helper.rb +5 -0
  90. data/spec/resources/helpers/plugin_application_helper.rb +6 -0
  91. data/spec/resources/helpers/view_spec_helper.rb +13 -0
  92. data/spec/resources/models/animal.rb +4 -0
  93. data/spec/resources/models/person.rb +18 -0
  94. data/spec/resources/models/thing.rb +3 -0
  95. data/spec/resources/views/controller_spec/_partial.html.erb +0 -0
  96. data/spec/resources/views/controller_spec/action_setting_flash_after_session_reset.html.erb +1 -0
  97. data/spec/resources/views/controller_spec/action_setting_flash_before_session_reset.html.erb +1 -0
  98. data/spec/resources/views/controller_spec/action_setting_the_assigns_hash.html.erb +0 -0
  99. data/spec/resources/views/controller_spec/action_with_errors_in_template.html.erb +1 -0
  100. data/spec/resources/views/controller_spec/action_with_template.html.erb +1 -0
  101. data/spec/resources/views/controller_spec/non_existent_action_with_existent_template.html.erb +1 -0
  102. data/spec/resources/views/layouts/application.html.erb +0 -0
  103. data/spec/resources/views/layouts/simple.html.erb +0 -0
  104. data/spec/resources/views/objects/_object.html.erb +1 -0
  105. data/spec/resources/views/render_spec/_a_partial.html.erb +0 -0
  106. data/spec/resources/views/render_spec/action_with_alternate_layout.html.erb +0 -0
  107. data/spec/resources/views/render_spec/some_action.html.erb +0 -0
  108. data/spec/resources/views/render_spec/some_action.js.rjs +1 -0
  109. data/spec/resources/views/rjs_spec/_replacement_partial.html.erb +1 -0
  110. data/spec/resources/views/rjs_spec/hide_div.js.rjs +1 -0
  111. data/spec/resources/views/rjs_spec/hide_page_element.js.rjs +1 -0
  112. data/spec/resources/views/rjs_spec/insert_html.js.rjs +1 -0
  113. data/spec/resources/views/rjs_spec/replace.js.rjs +1 -0
  114. data/spec/resources/views/rjs_spec/replace_html.js.rjs +1 -0
  115. data/spec/resources/views/rjs_spec/replace_html_with_partial.js.rjs +1 -0
  116. data/spec/resources/views/rjs_spec/visual_effect.js.rjs +1 -0
  117. data/spec/resources/views/rjs_spec/visual_toggle_effect.js.rjs +1 -0
  118. data/spec/resources/views/tag_spec/no_tags.html.erb +1 -0
  119. data/spec/resources/views/tag_spec/single_div_with_no_attributes.html.erb +1 -0
  120. data/spec/resources/views/tag_spec/single_div_with_one_attribute.html.erb +1 -0
  121. data/spec/resources/views/view_spec/_partial.html.erb +2 -0
  122. data/spec/resources/views/view_spec/_partial_used_twice.html.erb +0 -0
  123. data/spec/resources/views/view_spec/_partial_with_local_variable.html.erb +1 -0
  124. data/spec/resources/views/view_spec/_partial_with_sub_partial.html.erb +1 -0
  125. data/spec/resources/views/view_spec/_spacer.html.erb +1 -0
  126. data/spec/resources/views/view_spec/accessor.html.erb +6 -0
  127. data/spec/resources/views/view_spec/block_helper.html.erb +3 -0
  128. data/spec/resources/views/view_spec/entry_form.html.erb +2 -0
  129. data/spec/resources/views/view_spec/explicit_helper.html.erb +2 -0
  130. data/spec/resources/views/view_spec/foo/show.html.erb +1 -0
  131. data/spec/resources/views/view_spec/implicit_helper.html.erb +2 -0
  132. data/spec/resources/views/view_spec/multiple_helpers.html.erb +3 -0
  133. data/spec/resources/views/view_spec/path_params.html.erb +1 -0
  134. data/spec/resources/views/view_spec/should_not_receive.html.erb +3 -0
  135. data/spec/resources/views/view_spec/template_with_partial.html.erb +5 -0
  136. data/spec/resources/views/view_spec/template_with_partial_using_collection.html.erb +3 -0
  137. data/spec/resources/views/view_spec/template_with_partial_with_array.html.erb +1 -0
  138. data/spec/resources/views/view_spec/view_helpers.html.erb +1 -0
  139. data/spec/spec/rails/example/assigns_hash_proxy_spec.rb +109 -0
  140. data/spec/spec/rails/example/configuration_spec.rb +67 -0
  141. data/spec/spec/rails/example/controller_example_group_spec.rb +307 -0
  142. data/spec/spec/rails/example/controller_isolation_spec.rb +75 -0
  143. data/spec/spec/rails/example/cookies_proxy_spec.rb +87 -0
  144. data/spec/spec/rails/example/error_handling_spec.rb +90 -0
  145. data/spec/spec/rails/example/example_group_factory_spec.rb +112 -0
  146. data/spec/spec/rails/example/helper_example_group_spec.rb +247 -0
  147. data/spec/spec/rails/example/model_example_group_spec.rb +32 -0
  148. data/spec/spec/rails/example/routing_example_group_spec.rb +9 -0
  149. data/spec/spec/rails/example/shared_routing_example_group_examples.rb +241 -0
  150. data/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
  151. data/spec/spec/rails/example/view_example_group_spec.rb +346 -0
  152. data/spec/spec/rails/extensions/action_view_base_spec.rb +79 -0
  153. data/spec/spec/rails/extensions/active_record_spec.rb +14 -0
  154. data/spec/spec/rails/interop/testcase_spec.rb +70 -0
  155. data/spec/spec/rails/matchers/ar_be_valid_spec.rb +19 -0
  156. data/spec/spec/rails/matchers/assert_select_spec.rb +835 -0
  157. data/spec/spec/rails/matchers/errors_on_spec.rb +37 -0
  158. data/spec/spec/rails/matchers/have_text_spec.rb +69 -0
  159. data/spec/spec/rails/matchers/include_text_spec.rb +62 -0
  160. data/spec/spec/rails/matchers/redirect_to_spec.rb +253 -0
  161. data/spec/spec/rails/matchers/render_template_spec.rb +208 -0
  162. data/spec/spec/rails/matchers/should_change_spec.rb +15 -0
  163. data/spec/spec/rails/mocks/ar_classes.rb +10 -0
  164. data/spec/spec/rails/mocks/mock_model_spec.rb +112 -0
  165. data/spec/spec/rails/mocks/stub_model_spec.rb +80 -0
  166. data/spec/spec/rails/sample_modified_fixture.rb +8 -0
  167. data/spec/spec/rails/sample_spec.rb +8 -0
  168. data/spec/spec/rails/spec_spec.rb +11 -0
  169. data/spec/spec_helper.rb +78 -0
  170. metadata +363 -0
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Runner
5
+ describe Configuration do
6
+
7
+ def config
8
+ @config ||= Configuration.new
9
+ end
10
+
11
+ describe "#use_transactional_fixtures" do
12
+ it "should return ActiveSupport::TestCase.use_transactional_fixtures" do
13
+ config.use_transactional_fixtures.should == ActiveSupport::TestCase.use_transactional_fixtures
14
+ end
15
+
16
+ it "should set ActiveSupport::TestCase.use_transactional_fixtures to false" do
17
+ ActiveSupport::TestCase.should_receive(:use_transactional_fixtures=).with(false)
18
+ config.use_transactional_fixtures = false
19
+ end
20
+
21
+ it "should set ActiveSupport::TestCase.use_transactional_fixtures to true" do
22
+ ActiveSupport::TestCase.should_receive(:use_transactional_fixtures=).with(true)
23
+ config.use_transactional_fixtures = true
24
+ end
25
+ end
26
+
27
+ describe "#use_instantiated_fixtures" do
28
+ it "should return ActiveSupport::TestCase.use_transactional_fixtures" do
29
+ config.use_instantiated_fixtures.should == ActiveSupport::TestCase.use_instantiated_fixtures
30
+ end
31
+
32
+ it "should set ActiveSupport::TestCase.use_instantiated_fixtures to false" do
33
+ ActiveSupport::TestCase.should_receive(:use_instantiated_fixtures=).with(false)
34
+ config.use_instantiated_fixtures = false
35
+ end
36
+
37
+ it "should set ActiveSupport::TestCase.use_instantiated_fixtures to true" do
38
+ ActiveSupport::TestCase.should_receive(:use_instantiated_fixtures=).with(true)
39
+ config.use_instantiated_fixtures = true
40
+ end
41
+ end
42
+
43
+ describe "#fixture_path" do
44
+ it "should default to RAILS_ROOT + '/spec/fixtures'" do
45
+ config.fixture_path.should == RAILS_ROOT + '/spec/fixtures'
46
+ ActiveSupport::TestCase.fixture_path.should == RAILS_ROOT + '/spec/fixtures'
47
+ ActionController::IntegrationTest.fixture_path.should == RAILS_ROOT + '/spec/fixtures'
48
+ end
49
+
50
+ it "should set fixture_path" do
51
+ config.fixture_path = "/new/path"
52
+ config.fixture_path.should == "/new/path"
53
+ ActiveSupport::TestCase.fixture_path.should == "/new/path"
54
+ ActionController::IntegrationTest.fixture_path.should == "/new/path"
55
+ end
56
+ end
57
+
58
+ describe "#global_fixtures" do
59
+ it "should set fixtures on TestCase" do
60
+ ActiveSupport::TestCase.should_receive(:fixtures).with(:blah)
61
+ config.global_fixtures = [:blah]
62
+ end
63
+ end
64
+
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,307 @@
1
+ require 'spec_helper'
2
+ require 'controller_spec_controller'
3
+ require File.join(File.dirname(__FILE__), "/shared_routing_example_group_examples.rb")
4
+
5
+ ['integration', 'isolation'].each do |mode|
6
+ describe "A controller example running in #{mode} mode", :type => :controller do
7
+ controller_name :controller_spec
8
+ integrate_views if mode == 'integration'
9
+
10
+ accesses_configured_helper_methods
11
+ it_should_behave_like "a routing example"
12
+
13
+ describe "with an implicit subject" do
14
+ it "uses the controller" do
15
+ subject.should == controller
16
+ end
17
+ end
18
+
19
+ describe "with a specified subject" do
20
+ subject { 'specified' }
21
+
22
+ it "uses the specified subject" do
23
+ subject.should == 'specified'
24
+ end
25
+ end
26
+
27
+ it "should provide controller.session as session" do
28
+ get 'action_with_template'
29
+ session.should equal(controller.session)
30
+ end
31
+
32
+ it "should provide the same session object before and after the action" do
33
+ session_before = session
34
+ get 'action_with_template'
35
+ session.should equal(session_before)
36
+ end
37
+
38
+ it "should keep the same data in the session before and after the action" do
39
+ session[:foo] = :bar
40
+ get 'action_with_template'
41
+ session[:foo].should == :bar
42
+ end
43
+
44
+ it "should ensure controller.session is NOT nil before the action" do
45
+ controller.session.should_not be_nil
46
+ get 'action_with_template'
47
+ end
48
+
49
+ it "should ensure controller.session is NOT nil after the action" do
50
+ get 'action_with_template'
51
+ controller.session.should_not be_nil
52
+ end
53
+
54
+ it "should allow specifying a partial with partial name only" do
55
+ get 'action_with_partial'
56
+ response.should render_template("_partial")
57
+ end
58
+
59
+ it "should allow specifying a partial with should_receive(:render)" do
60
+ controller.should_receive(:render).with(:partial => "controller_spec/partial")
61
+ get 'action_with_partial'
62
+ end
63
+
64
+ it "should allow specifying a partial with should_receive(:render) with object" do
65
+ controller.should_receive(:render).with(:partial => "controller_spec/partial", :object => "something")
66
+ get 'action_with_partial_with_object', :thing => "something"
67
+ end
68
+
69
+ it "should allow specifying a partial with should_receive(:render) with locals" do
70
+ controller.should_receive(:render).with(:partial => "controller_spec/partial", :locals => {:thing => "something"})
71
+ get 'action_with_partial_with_locals', :thing => "something"
72
+ end
73
+
74
+ it "should yield to render :update" do
75
+ template = stub("template")
76
+ controller.should_receive(:render).with(:update).and_yield(template)
77
+ template.should_receive(:replace).with(:bottom, "replace_me", :partial => "non_existent_partial")
78
+ get 'action_with_render_update'
79
+ end
80
+
81
+ it "should allow a path relative to RAILS_ROOT/app/views/ when specifying a partial" do
82
+ get 'action_with_partial'
83
+ response.should render_template("controller_spec/_partial")
84
+ end
85
+
86
+ it "should provide access to flash" do
87
+ get 'action_which_sets_flash'
88
+ flash[:flash_key].should == "flash value"
89
+ end
90
+
91
+ it "should provide access to flash values set after a session reset" do
92
+ get 'action_setting_flash_after_session_reset'
93
+ flash[:after_reset].should == "available"
94
+ end
95
+
96
+ it "should not provide access to flash values set before a session reset" do
97
+ get 'action_setting_flash_before_session_reset'
98
+ flash[:before_reset].should_not == "available"
99
+ end
100
+
101
+ it "should provide access to session" do
102
+ session[:session_key] = "session value"
103
+ lambda do
104
+ get 'action_which_gets_session', :expected => "session value"
105
+ end.should_not raise_error
106
+ end
107
+
108
+ it "allows inline rendering" do
109
+ get 'action_that_renders_inline'
110
+ response.body.should == "inline code"
111
+ end
112
+
113
+ describe "handling should_receive(:render)" do
114
+ it "should warn" do
115
+ controller.should_receive(:render).with(:template => "controller_spec/action_with_template")
116
+ get :action_with_template
117
+ end
118
+ end
119
+
120
+ describe "handling should_not_receive(:render)" do
121
+ it "should warn" do
122
+ controller.should_not_receive(:render).with(:template => "the/wrong/template")
123
+ get :action_with_template
124
+ end
125
+ end
126
+
127
+ describe "setting cookies in the request" do
128
+
129
+ it "should support a String key" do
130
+ cookies['cookie_key'] = 'cookie value'
131
+ get 'action_which_gets_cookie', :expected => "cookie value"
132
+ end
133
+
134
+ it "should support a Symbol key" do
135
+ cookies[:cookie_key] = 'cookie value'
136
+ get 'action_which_gets_cookie', :expected => "cookie value"
137
+ end
138
+
139
+ it "should support a Hash value" do
140
+ cookies[:cookie_key] = {'value' => 'cookie value', 'path' => '/not/default'}
141
+ get 'action_which_gets_cookie', :expected => {'value' => 'cookie value', 'path' => '/not/default'}
142
+ end
143
+
144
+ end
145
+
146
+ describe "reading cookies from the response" do
147
+
148
+ it "should support a Symbol key" do
149
+ get 'action_which_sets_cookie', :value => "cookie value"
150
+ if ::Rails::VERSION::STRING >= "2.3"
151
+ cookies[:cookie_key].should match("cookie[\+ ]value")
152
+ else
153
+ cookies[:cookie_key].should == ["cookie value"]
154
+ end
155
+ end
156
+
157
+ it "should support a String key" do
158
+ get 'action_which_sets_cookie', :value => "cookie value"
159
+ if ::Rails::VERSION::STRING >= "2.3"
160
+ cookies['cookie_key'].should match("cookie[\+ ]value")
161
+ else
162
+ cookies['cookie_key'].should == ["cookie value"]
163
+ end
164
+ end
165
+
166
+ end
167
+
168
+ it "should expose instance vars through the assigns hash" do
169
+ get 'action_setting_the_assigns_hash'
170
+ assigns[:indirect_assigns_key].should == :indirect_assigns_key_value
171
+ end
172
+
173
+ it "should expose instance vars through the assigns hash that are set to false" do
174
+ get 'action_that_assigns_false_to_a_variable'
175
+ assigns[:a_variable].should be_false
176
+ end
177
+
178
+ it "should NOT complain when calling should_receive with arguments other than :render" do
179
+ controller.should_receive(:anything_besides_render)
180
+ lambda {
181
+ controller.rspec_verify
182
+ }.should raise_error(Exception, /expected :anything_besides_render/)
183
+ end
184
+
185
+ it "should not run a skipped before_filter" do
186
+ lambda {
187
+ get 'action_with_skipped_before_filter'
188
+ }.should_not raise_error
189
+ end
190
+
191
+ if ::Rails::VERSION::STRING > '2.1'
192
+ describe "extending #render on a controller" do
193
+ it "supports two arguments (as with rails 2.1)" do
194
+ get 'action_with_two_arg_render'
195
+ response.body.should =~ /new Effect\.Highlight/
196
+ end
197
+ end
198
+ end
199
+
200
+ it "should access headers" do
201
+ request.env['ACCEPT'] = "application/json"
202
+ get 'action_that_returns_headers', :header => 'ACCEPT'
203
+ response.body.should == "application/json"
204
+ end
205
+ end
206
+
207
+ describe "Given a controller spec for RedirectSpecController running in #{mode} mode", :type => :controller do
208
+ controller_name :redirect_spec
209
+ integrate_views if mode == 'integration'
210
+
211
+ it "a redirect should ignore the absence of a template" do
212
+ get 'action_with_redirect_to_somewhere'
213
+ response.should be_redirect
214
+ response.redirect_url.should == "http://test.host/redirect_spec/somewhere"
215
+ response.should redirect_to("http://test.host/redirect_spec/somewhere")
216
+ end
217
+
218
+ it "a call to response.should redirect_to should fail if no redirect" do
219
+ get 'action_with_no_redirect'
220
+ lambda {
221
+ response.redirect?.should be_true
222
+ }.should fail
223
+ lambda {
224
+ response.should redirect_to("http://test.host/redirect_spec/somewhere")
225
+ }.should fail_with("expected redirect to \"http://test.host/redirect_spec/somewhere\", got no redirect")
226
+ end
227
+ end
228
+
229
+ describe "Given a controller spec running in #{mode} mode" do
230
+ example_group = describe "A controller spec"
231
+ # , :type => :controller do
232
+ # integrate_views if mode == 'integration'
233
+ it "a spec in a context without controller_name set should fail with a useful warning" do
234
+ pending("need a new way to deal with examples that should_raise")
235
+ # ,
236
+ # :should_raise => [
237
+ # Spec::Expectations::ExpectationNotMetError,
238
+ # /You have to declare the controller name in controller specs/
239
+ # ] do
240
+ end
241
+ end
242
+
243
+ end
244
+
245
+ ['integration', 'isolation'].each do |mode|
246
+ describe "A controller example running in #{mode} mode", :type => :controller do
247
+ controller_name :controller_inheriting_from_application_controller
248
+ integrate_views if mode == 'integration'
249
+
250
+ it "should only have a before filter inherited from ApplicationController run once..." do
251
+ controller.should_receive(:i_should_only_be_run_once).once
252
+ get :action_with_inherited_before_filter
253
+ end
254
+ end
255
+ end
256
+
257
+ describe ControllerSpecController, :type => :controller do
258
+ it "should use the controller passed to #describe" do
259
+ end
260
+ end
261
+
262
+ describe "A controller spec with controller_name set", :type => :controller do
263
+ controller_name :controller_spec
264
+
265
+ describe "nested" do
266
+ it "should inherit the controller name" do
267
+ get 'action_with_template'
268
+ response.should be_success
269
+ end
270
+ end
271
+ end
272
+
273
+ module Spec
274
+ module Rails
275
+ module Example
276
+ describe ApplicationController, :type => :controller do
277
+ describe "controller_name" do
278
+ controller_name :controller_spec
279
+ it "overrides the controller class submitted to the outermost group" do
280
+ subject.should be_an_instance_of(ControllerSpecController)
281
+ end
282
+ describe "in a nested group" do
283
+ it "overrides the controller class submitted to the outermost group" do
284
+ subject.should be_an_instance_of(ControllerSpecController)
285
+ end
286
+ describe "(doubly nested)" do
287
+ it "overrides the controller class submitted to the outermost group" do
288
+ subject.should be_an_instance_of(ControllerSpecController)
289
+ end
290
+ end
291
+ end
292
+ end
293
+ end
294
+
295
+ describe ControllerExampleGroup do
296
+ it "should clear its name from the description" do
297
+ group = describe("foo", :type => :controller) do
298
+ $nested_group = describe("bar") do
299
+ end
300
+ end
301
+ group.description.to_s.should == "foo"
302
+ $nested_group.description.to_s.should == "foo bar"
303
+ end
304
+ end
305
+ end
306
+ end
307
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+ require 'controller_spec_controller'
3
+
4
+ describe "a controller spec running in isolation mode", :type => :controller do
5
+ controller_name :controller_spec
6
+
7
+ it "does not care if the specified template doesn't exist" do
8
+ get 'some_action'
9
+ response.should be_success
10
+ response.should render_template("template/that/does/not/actually/exist")
11
+ end
12
+
13
+ it "does not care if the implied template doesn't exist" do
14
+ get 'some_action_with_implied_template'
15
+ response.should be_success
16
+ response.should render_template("some_action_with_implied_template")
17
+ end
18
+
19
+ it "does not care if the template has errors" do
20
+ get 'action_with_errors_in_template'
21
+ response.should be_success
22
+ response.should render_template("action_with_errors_in_template")
23
+ end
24
+
25
+ it "does not care if the template exists but the action doesn't" do
26
+ get 'non_existent_action_with_existent_template'
27
+ response.should be_success
28
+ end
29
+
30
+ it "fails if the neither the action nor the template exist" do
31
+ expect {get 'non_existent_action'}.to raise_error(ActionController::UnknownAction)
32
+ end
33
+ end
34
+
35
+ describe "a controller spec running in integration mode", :type => :controller do
36
+ controller_name :controller_spec
37
+ integrate_views
38
+
39
+ it "renders a template" do
40
+ get 'action_with_template'
41
+ response.should be_success
42
+ response.should have_tag('div', 'This is action_with_template.rhtml')
43
+ end
44
+
45
+ it "fails if the template doesn't exist" do
46
+ error = defined?(ActionController::MissingTemplate) ? ActionController::MissingTemplate : ActionView::MissingTemplate
47
+ lambda { get 'some_action' }.should raise_error(error)
48
+ end
49
+
50
+ it "fails if the template has errors" do
51
+ lambda { get 'action_with_errors_in_template' }.should raise_error(ActionView::TemplateError)
52
+ end
53
+
54
+ it "fails if the action doesn't exist" do
55
+ expect {get 'non_existent_action'}.to raise_error(ActionController::UnknownAction)
56
+ end
57
+
58
+ describe "nested" do
59
+ it "should render a template" do
60
+ get 'action_with_template'
61
+ response.should be_success
62
+ response.should have_tag('div', 'This is action_with_template.rhtml')
63
+ end
64
+
65
+ describe "with integrate_views turned off" do
66
+ integrate_views false
67
+
68
+ it "should not care if the template doesn't exist" do
69
+ get 'some_action'
70
+ response.should be_success
71
+ response.should render_template("template/that/does/not/actually/exist")
72
+ end
73
+ end
74
+ end
75
+ end