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.
- data/.document +7 -0
- data/.gitignore +8 -0
- data/Contribute.rdoc +4 -0
- data/Gemfile +4 -0
- data/History.rdoc +321 -0
- data/License.txt +33 -0
- data/Manifest.txt +165 -0
- data/README.rdoc +48 -0
- data/Rakefile +12 -0
- data/TODO.txt +17 -0
- data/Upgrade.rdoc +148 -0
- data/generators/integration_spec/integration_spec_generator.rb +10 -0
- data/generators/integration_spec/templates/integration_spec.rb +4 -0
- data/generators/rspec/CHANGES +1 -0
- data/generators/rspec/rspec_generator.rb +72 -0
- data/generators/rspec/templates/previous_failures.txt +0 -0
- data/generators/rspec/templates/rcov.opts +2 -0
- data/generators/rspec/templates/rspec.rake +146 -0
- data/generators/rspec/templates/script/autospec +6 -0
- data/generators/rspec/templates/script/spec +10 -0
- data/generators/rspec/templates/spec.opts +4 -0
- data/generators/rspec/templates/spec_helper.rb +54 -0
- data/generators/rspec_controller/USAGE +33 -0
- data/generators/rspec_controller/rspec_controller_generator.rb +47 -0
- data/generators/rspec_controller/templates/controller_spec.rb +25 -0
- data/generators/rspec_controller/templates/helper_spec.rb +11 -0
- data/generators/rspec_controller/templates/view_spec.rb +12 -0
- data/generators/rspec_default_values.rb +28 -0
- data/generators/rspec_model/USAGE +18 -0
- data/generators/rspec_model/rspec_model_generator.rb +35 -0
- data/generators/rspec_model/templates/model_spec.rb +13 -0
- data/generators/rspec_scaffold/rspec_scaffold_generator.rb +154 -0
- data/generators/rspec_scaffold/templates/controller_spec.rb +131 -0
- data/generators/rspec_scaffold/templates/edit_erb_spec.rb +25 -0
- data/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
- data/generators/rspec_scaffold/templates/index_erb_spec.rb +27 -0
- data/generators/rspec_scaffold/templates/new_erb_spec.rb +25 -0
- data/generators/rspec_scaffold/templates/routing_spec.rb +33 -0
- data/generators/rspec_scaffold/templates/show_erb_spec.rb +22 -0
- data/init.rb +9 -0
- data/lib/autotest/discover.rb +5 -0
- data/lib/autotest/rails_rspec.rb +76 -0
- data/lib/spec/rails.rb +26 -0
- data/lib/spec/rails/example.rb +48 -0
- data/lib/spec/rails/example/assigns_hash_proxy.rb +39 -0
- data/lib/spec/rails/example/controller_example_group.rb +285 -0
- data/lib/spec/rails/example/cookies_proxy.rb +29 -0
- data/lib/spec/rails/example/functional_example_group.rb +106 -0
- data/lib/spec/rails/example/helper_example_group.rb +153 -0
- data/lib/spec/rails/example/integration_example_group.rb +16 -0
- data/lib/spec/rails/example/model_example_group.rb +15 -0
- data/lib/spec/rails/example/render_observer.rb +82 -0
- data/lib/spec/rails/example/routing_example_group.rb +16 -0
- data/lib/spec/rails/example/routing_helpers.rb +66 -0
- data/lib/spec/rails/example/view_example_group.rb +203 -0
- data/lib/spec/rails/extensions.rb +11 -0
- data/lib/spec/rails/extensions/action_controller/rescue.rb +42 -0
- data/lib/spec/rails/extensions/action_controller/test_case.rb +16 -0
- data/lib/spec/rails/extensions/action_controller/test_response.rb +21 -0
- data/lib/spec/rails/extensions/action_view/base.rb +35 -0
- data/lib/spec/rails/extensions/active_record/base.rb +45 -0
- data/lib/spec/rails/extensions/active_support/test_case.rb +7 -0
- data/lib/spec/rails/extensions/spec/matchers/have.rb +23 -0
- data/lib/spec/rails/extensions/spec/runner/configuration.rb +45 -0
- data/lib/spec/rails/interop/testcase.rb +14 -0
- data/lib/spec/rails/matchers.rb +32 -0
- data/lib/spec/rails/matchers/ar_be_valid.rb +27 -0
- data/lib/spec/rails/matchers/assert_select.rb +180 -0
- data/lib/spec/rails/matchers/change.rb +13 -0
- data/lib/spec/rails/matchers/have_text.rb +57 -0
- data/lib/spec/rails/matchers/include_text.rb +54 -0
- data/lib/spec/rails/matchers/redirect_to.rb +126 -0
- data/lib/spec/rails/matchers/render_template.rb +129 -0
- data/lib/spec/rails/matchers/route_to.rb +149 -0
- data/lib/spec/rails/mocks.rb +140 -0
- data/lib/spec/rails/version.rb +16 -0
- data/rspec-rails.gemspec +25 -0
- data/spec/autotest/mappings_spec.rb +86 -0
- data/spec/rails_suite.rb +7 -0
- data/spec/resources/controllers/action_view_base_spec_controller.rb +2 -0
- data/spec/resources/controllers/application.rb +9 -0
- data/spec/resources/controllers/controller_spec_controller.rb +127 -0
- data/spec/resources/controllers/example.txt +1 -0
- data/spec/resources/controllers/redirect_spec_controller.rb +70 -0
- data/spec/resources/controllers/render_spec_controller.rb +34 -0
- data/spec/resources/controllers/rjs_spec_controller.rb +58 -0
- data/spec/resources/helpers/addition_helper.rb +5 -0
- data/spec/resources/helpers/explicit_helper.rb +46 -0
- data/spec/resources/helpers/more_explicit_helper.rb +5 -0
- data/spec/resources/helpers/plugin_application_helper.rb +6 -0
- data/spec/resources/helpers/view_spec_helper.rb +13 -0
- data/spec/resources/models/animal.rb +4 -0
- data/spec/resources/models/person.rb +18 -0
- data/spec/resources/models/thing.rb +3 -0
- data/spec/resources/views/controller_spec/_partial.html.erb +0 -0
- data/spec/resources/views/controller_spec/action_setting_flash_after_session_reset.html.erb +1 -0
- data/spec/resources/views/controller_spec/action_setting_flash_before_session_reset.html.erb +1 -0
- data/spec/resources/views/controller_spec/action_setting_the_assigns_hash.html.erb +0 -0
- data/spec/resources/views/controller_spec/action_with_errors_in_template.html.erb +1 -0
- data/spec/resources/views/controller_spec/action_with_template.html.erb +1 -0
- data/spec/resources/views/controller_spec/non_existent_action_with_existent_template.html.erb +1 -0
- data/spec/resources/views/layouts/application.html.erb +0 -0
- data/spec/resources/views/layouts/simple.html.erb +0 -0
- data/spec/resources/views/objects/_object.html.erb +1 -0
- data/spec/resources/views/render_spec/_a_partial.html.erb +0 -0
- data/spec/resources/views/render_spec/action_with_alternate_layout.html.erb +0 -0
- data/spec/resources/views/render_spec/some_action.html.erb +0 -0
- data/spec/resources/views/render_spec/some_action.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/_replacement_partial.html.erb +1 -0
- data/spec/resources/views/rjs_spec/hide_div.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/hide_page_element.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/insert_html.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace_html.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace_html_with_partial.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/visual_effect.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/visual_toggle_effect.js.rjs +1 -0
- data/spec/resources/views/tag_spec/no_tags.html.erb +1 -0
- data/spec/resources/views/tag_spec/single_div_with_no_attributes.html.erb +1 -0
- data/spec/resources/views/tag_spec/single_div_with_one_attribute.html.erb +1 -0
- data/spec/resources/views/view_spec/_partial.html.erb +2 -0
- data/spec/resources/views/view_spec/_partial_used_twice.html.erb +0 -0
- data/spec/resources/views/view_spec/_partial_with_local_variable.html.erb +1 -0
- data/spec/resources/views/view_spec/_partial_with_sub_partial.html.erb +1 -0
- data/spec/resources/views/view_spec/_spacer.html.erb +1 -0
- data/spec/resources/views/view_spec/accessor.html.erb +6 -0
- data/spec/resources/views/view_spec/block_helper.html.erb +3 -0
- data/spec/resources/views/view_spec/entry_form.html.erb +2 -0
- data/spec/resources/views/view_spec/explicit_helper.html.erb +2 -0
- data/spec/resources/views/view_spec/foo/show.html.erb +1 -0
- data/spec/resources/views/view_spec/implicit_helper.html.erb +2 -0
- data/spec/resources/views/view_spec/multiple_helpers.html.erb +3 -0
- data/spec/resources/views/view_spec/path_params.html.erb +1 -0
- data/spec/resources/views/view_spec/should_not_receive.html.erb +3 -0
- data/spec/resources/views/view_spec/template_with_partial.html.erb +5 -0
- data/spec/resources/views/view_spec/template_with_partial_using_collection.html.erb +3 -0
- data/spec/resources/views/view_spec/template_with_partial_with_array.html.erb +1 -0
- data/spec/resources/views/view_spec/view_helpers.html.erb +1 -0
- data/spec/spec/rails/example/assigns_hash_proxy_spec.rb +109 -0
- data/spec/spec/rails/example/configuration_spec.rb +67 -0
- data/spec/spec/rails/example/controller_example_group_spec.rb +307 -0
- data/spec/spec/rails/example/controller_isolation_spec.rb +75 -0
- data/spec/spec/rails/example/cookies_proxy_spec.rb +87 -0
- data/spec/spec/rails/example/error_handling_spec.rb +90 -0
- data/spec/spec/rails/example/example_group_factory_spec.rb +112 -0
- data/spec/spec/rails/example/helper_example_group_spec.rb +247 -0
- data/spec/spec/rails/example/model_example_group_spec.rb +32 -0
- data/spec/spec/rails/example/routing_example_group_spec.rb +9 -0
- data/spec/spec/rails/example/shared_routing_example_group_examples.rb +241 -0
- data/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
- data/spec/spec/rails/example/view_example_group_spec.rb +346 -0
- data/spec/spec/rails/extensions/action_view_base_spec.rb +79 -0
- data/spec/spec/rails/extensions/active_record_spec.rb +14 -0
- data/spec/spec/rails/interop/testcase_spec.rb +70 -0
- data/spec/spec/rails/matchers/ar_be_valid_spec.rb +19 -0
- data/spec/spec/rails/matchers/assert_select_spec.rb +835 -0
- data/spec/spec/rails/matchers/errors_on_spec.rb +37 -0
- data/spec/spec/rails/matchers/have_text_spec.rb +69 -0
- data/spec/spec/rails/matchers/include_text_spec.rb +62 -0
- data/spec/spec/rails/matchers/redirect_to_spec.rb +253 -0
- data/spec/spec/rails/matchers/render_template_spec.rb +208 -0
- data/spec/spec/rails/matchers/should_change_spec.rb +15 -0
- data/spec/spec/rails/mocks/ar_classes.rb +10 -0
- data/spec/spec/rails/mocks/mock_model_spec.rb +112 -0
- data/spec/spec/rails/mocks/stub_model_spec.rb +80 -0
- data/spec/spec/rails/sample_modified_fixture.rb +8 -0
- data/spec/spec/rails/sample_spec.rb +8 -0
- data/spec/spec/rails/spec_spec.rb +11 -0
- data/spec/spec_helper.rb +78 -0
- 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
|