cavalle-rspec-rails 1.2.2.0.1
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/History.rdoc +207 -0
- data/License.txt +33 -0
- data/Manifest.txt +167 -0
- data/README.rdoc +45 -0
- data/Rakefile +79 -0
- data/TODO.txt +1 -0
- data/Upgrade.rdoc +103 -0
- data/features/step_definitions/people.rb +6 -0
- data/features/support/env.rb +13 -0
- data/features/transactions/transactions_should_rollback.feature +16 -0
- data/generators/rspec/CHANGES +1 -0
- data/generators/rspec/rspec_generator.rb +54 -0
- data/generators/rspec/templates/previous_failures.txt +0 -0
- data/generators/rspec/templates/rcov.opts +2 -0
- data/generators/rspec/templates/rspec.rake +165 -0
- data/generators/rspec/templates/script/autospec +6 -0
- data/generators/rspec/templates/script/spec +10 -0
- data/generators/rspec/templates/script/spec_server +9 -0
- data/generators/rspec/templates/spec.opts +4 -0
- data/generators/rspec/templates/spec_helper.rb +47 -0
- data/generators/rspec_controller/USAGE +33 -0
- data/generators/rspec_controller/rspec_controller_generator.rb +45 -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 +19 -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 +15 -0
- data/generators/rspec_scaffold/rspec_scaffold_generator.rb +150 -0
- data/generators/rspec_scaffold/templates/controller_spec.rb +171 -0
- data/generators/rspec_scaffold/templates/edit_erb_spec.rb +27 -0
- data/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
- data/generators/rspec_scaffold/templates/index_erb_spec.rb +28 -0
- data/generators/rspec_scaffold/templates/new_erb_spec.rb +27 -0
- data/generators/rspec_scaffold/templates/routing_spec.rb +63 -0
- data/generators/rspec_scaffold/templates/show_erb_spec.rb +23 -0
- data/init.rb +9 -0
- data/lib/autotest/discover.rb +1 -0
- data/lib/autotest/rails_rspec.rb +76 -0
- data/lib/spec/rails/example/assigns_hash_proxy.rb +39 -0
- data/lib/spec/rails/example/controller_example_group.rb +247 -0
- data/lib/spec/rails/example/cookies_proxy.rb +29 -0
- data/lib/spec/rails/example/functional_example_group.rb +84 -0
- data/lib/spec/rails/example/helper_example_group.rb +153 -0
- data/lib/spec/rails/example/model_example_group.rb +14 -0
- data/lib/spec/rails/example/render_observer.rb +67 -0
- data/lib/spec/rails/example/routing_example_group.rb +13 -0
- data/lib/spec/rails/example/routing_helpers.rb +70 -0
- data/lib/spec/rails/example/view_example_group.rb +186 -0
- data/lib/spec/rails/example.rb +47 -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 +33 -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 +44 -0
- data/lib/spec/rails/extensions.rb +11 -0
- data/lib/spec/rails/interop/testcase.rb +14 -0
- data/lib/spec/rails/matchers/ar_be_valid.rb +44 -0
- data/lib/spec/rails/matchers/assert_select.rb +146 -0
- data/lib/spec/rails/matchers/change.rb +11 -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 +114 -0
- data/lib/spec/rails/matchers.rb +32 -0
- data/lib/spec/rails/mocks.rb +135 -0
- data/lib/spec/rails/spec_server.rb +127 -0
- data/lib/spec/rails/story_adapter.rb +79 -0
- data/lib/spec/rails/version.rb +15 -0
- data/lib/spec/rails.rb +28 -0
- data/rspec-rails.gemspec +57 -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 +120 -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 +30 -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/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 +5 -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/spec/rails/example/assigns_hash_proxy_spec.rb +109 -0
- data/spec/spec/rails/example/configuration_spec.rb +65 -0
- data/spec/spec/rails/example/controller_example_group_spec.rb +299 -0
- data/spec/spec/rails/example/controller_isolation_spec.rb +56 -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 +233 -0
- data/spec/spec/rails/example/model_example_group_spec.rb +20 -0
- data/spec/spec/rails/example/routing_example_group_spec.rb +9 -0
- data/spec/spec/rails/example/shared_routing_example_group_examples.rb +44 -0
- data/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
- data/spec/spec/rails/example/view_example_group_spec.rb +335 -0
- data/spec/spec/rails/extensions/action_view_base_spec.rb +48 -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 +45 -0
- data/spec/spec/rails/matchers/assert_select_spec.rb +809 -0
- data/spec/spec/rails/matchers/errors_on_spec.rb +25 -0
- data/spec/spec/rails/matchers/have_text_spec.rb +70 -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 +191 -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 +106 -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_server_spec.rb +107 -0
- data/spec/spec/rails/spec_spec.rb +11 -0
- data/spec/spec_helper.rb +79 -0
- metadata +277 -0
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../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 "should not care if the 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 "should not care if the template has errors" do
|
14
|
+
get 'action_with_errors_in_template'
|
15
|
+
response.should be_success
|
16
|
+
response.should render_template("action_with_errors_in_template")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "a controller spec running in integration mode", :type => :controller do
|
21
|
+
controller_name :controller_spec
|
22
|
+
integrate_views
|
23
|
+
|
24
|
+
it "should render a template" do
|
25
|
+
get 'action_with_template'
|
26
|
+
response.should be_success
|
27
|
+
response.should have_tag('div', 'This is action_with_template.rhtml')
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should choke if the template doesn't exist" do
|
31
|
+
error = defined?(ActionController::MissingTemplate) ? ActionController::MissingTemplate : ActionView::MissingTemplate
|
32
|
+
lambda { get 'some_action' }.should raise_error(error)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should choke if the template has errors" do
|
36
|
+
lambda { get 'action_with_errors_in_template' }.should raise_error(ActionView::TemplateError)
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "nested" do
|
40
|
+
it "should render a template" do
|
41
|
+
get 'action_with_template'
|
42
|
+
response.should be_success
|
43
|
+
response.should have_tag('div', 'This is action_with_template.rhtml')
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "with integrate_views turned off" do
|
47
|
+
integrate_views false
|
48
|
+
|
49
|
+
it "should not care if the template doesn't exist" do
|
50
|
+
get 'some_action'
|
51
|
+
response.should be_success
|
52
|
+
response.should render_template("template/that/does/not/actually/exist")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
|
3
|
+
class CookiesProxyExamplesController < ActionController::Base
|
4
|
+
def index
|
5
|
+
cookies[:key] = cookies[:key]
|
6
|
+
render :text => ""
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module Spec
|
11
|
+
module Rails
|
12
|
+
module Example
|
13
|
+
describe CookiesProxy, :type => :controller do
|
14
|
+
controller_name :cookies_proxy_examples
|
15
|
+
|
16
|
+
describe "with a String key" do
|
17
|
+
|
18
|
+
it "should accept a String value" do
|
19
|
+
proxy = CookiesProxy.new(self)
|
20
|
+
proxy['key'] = 'value'
|
21
|
+
get :index
|
22
|
+
if ::Rails::VERSION::STRING >= "2.3"
|
23
|
+
proxy['key'].should == 'value'
|
24
|
+
else
|
25
|
+
proxy['key'].should == ['value']
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should accept a Hash value" do
|
30
|
+
proxy = CookiesProxy.new(self)
|
31
|
+
proxy['key'] = { :value => 'value', :expires => expiration = 1.hour.from_now, :path => path = '/path' }
|
32
|
+
get :index
|
33
|
+
if ::Rails::VERSION::STRING >= "2.3"
|
34
|
+
proxy['key'].should == 'value'
|
35
|
+
else
|
36
|
+
proxy['key'].should == ['value']
|
37
|
+
proxy['key'].value.should == ['value']
|
38
|
+
proxy['key'].expires.should == expiration
|
39
|
+
proxy['key'].path.should == path
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "with a Symbol key" do
|
46
|
+
|
47
|
+
it "should accept a String value" do
|
48
|
+
proxy = CookiesProxy.new(self)
|
49
|
+
proxy[:key] = 'value'
|
50
|
+
get :index
|
51
|
+
if ::Rails::VERSION::STRING >= "2.3"
|
52
|
+
proxy[:key].should == 'value'
|
53
|
+
else
|
54
|
+
proxy[:key].should == ['value']
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should accept a Hash value" do
|
59
|
+
proxy = CookiesProxy.new(self)
|
60
|
+
proxy[:key] = { :value => 'value', :expires => expiration = 1.hour.from_now, :path => path = '/path' }
|
61
|
+
get :index
|
62
|
+
if ::Rails::VERSION::STRING >= "2.3"
|
63
|
+
proxy[:key].should == 'value'
|
64
|
+
else
|
65
|
+
proxy[:key].should == ['value']
|
66
|
+
proxy[:key].value.should == ['value']
|
67
|
+
proxy[:key].expires.should == expiration
|
68
|
+
proxy[:key].path.should == path
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "#delete" do
|
75
|
+
it "should delete from the response cookies" do
|
76
|
+
proxy = CookiesProxy.new(self)
|
77
|
+
response_cookies = mock('cookies')
|
78
|
+
response.should_receive(:cookies).and_return(response_cookies)
|
79
|
+
response_cookies.should_receive(:delete).with('key')
|
80
|
+
proxy.delete :key
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -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
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Example
|
5
|
+
describe ExampleGroupFactory do
|
6
|
+
it "should return a ModelExampleGroup when given :type => :model" do
|
7
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
8
|
+
"name", :type => :model
|
9
|
+
) {}
|
10
|
+
example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return a ModelExampleGroup when given :location => '/blah/spec/models/'" do
|
14
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
15
|
+
"name", :location => '/blah/spec/models/blah.rb'
|
16
|
+
) {}
|
17
|
+
example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return a ModelExampleGroup when given :location => '\\blah\\spec\\models\\' (windows format)" do
|
21
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
22
|
+
"name", :location => '\\blah\\spec\\models\\blah.rb'
|
23
|
+
) {}
|
24
|
+
example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return an ActiveSupport::TestCase when given :location => '/blah/spec/foo/' (anything other than controllers, views and helpers)" do
|
28
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
29
|
+
"name", :location => '/blah/spec/foo/blah.rb'
|
30
|
+
) {}
|
31
|
+
example_group.superclass.should == ActiveSupport::TestCase
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should return an ActiveSupport::TestCase when given :location => '\\blah\\spec\\foo\\' (windows format) (anything other than controllers, views and helpers)" do
|
35
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
36
|
+
"name", :location => '\\blah\\spec\\foo\\blah.rb'
|
37
|
+
) {}
|
38
|
+
example_group.superclass.should == ActiveSupport::TestCase
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return a ViewExampleGroup when given :type => :view" do
|
42
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
43
|
+
"name", :type => :view
|
44
|
+
) {}
|
45
|
+
example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return a ViewExampleGroup when given :location => '/blah/spec/views/'" do
|
49
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
50
|
+
"name", :location => '/blah/spec/views/blah.rb'
|
51
|
+
) {}
|
52
|
+
example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return a ModelExampleGroup when given :location => '\\blah\\spec\\views\\' (windows format)" do
|
56
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
57
|
+
"name", :location => '\\blah\\spec\\views\\blah.rb'
|
58
|
+
) {}
|
59
|
+
example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should return a HelperExampleGroup when given :type => :helper" do
|
63
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
64
|
+
"name", :type => :helper
|
65
|
+
) {}
|
66
|
+
example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should return a HelperExampleGroup when given :location => '/blah/spec/helpers/'" do
|
70
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
71
|
+
"name", :location => '/blah/spec/helpers/blah.rb'
|
72
|
+
) {}
|
73
|
+
example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should return a ModelExampleGroup when given :location => '\\blah\\spec\\helpers\\' (windows format)" do
|
77
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
78
|
+
"name", :location => '\\blah\\spec\\helpers\\blah.rb'
|
79
|
+
) {}
|
80
|
+
example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should return a ControllerExampleGroup when given :type => :controller" do
|
84
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
85
|
+
"name", :type => :controller
|
86
|
+
) {}
|
87
|
+
example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should return a ControllerExampleGroup when given :location => '/blah/spec/controllers/'" do
|
91
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
92
|
+
"name", :location => '/blah/spec/controllers/blah.rb'
|
93
|
+
) {}
|
94
|
+
example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should return a ModelExampleGroup when given :location => '\\blah\\spec\\controllers\\' (windows format)" do
|
98
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
99
|
+
"name", :location => '\\blah\\spec\\controllers\\blah.rb'
|
100
|
+
) {}
|
101
|
+
example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should favor the :type over the :location" do
|
105
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
106
|
+
"name", :location => '/blah/spec/models/blah.rb', :type => :controller
|
107
|
+
) {}
|
108
|
+
example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,233 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
Spec::Runner.configuration.global_fixtures = :people
|
3
|
+
|
4
|
+
describe ExplicitHelper, :type => :helper do
|
5
|
+
include ExplicitHelper
|
6
|
+
|
7
|
+
it "should not require naming the helper if describe is passed a type" do
|
8
|
+
method_in_explicit_helper.should match(/text from a method/)
|
9
|
+
helper.method_in_explicit_helper.should match(/text from a method/)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module Spec
|
14
|
+
module Rails
|
15
|
+
module Example
|
16
|
+
describe HelperExampleGroup, :type => :helper do
|
17
|
+
helper_name :explicit
|
18
|
+
|
19
|
+
accesses_configured_helper_methods
|
20
|
+
|
21
|
+
it "DEPRECATED should have direct access to methods defined in helpers" do
|
22
|
+
method_in_explicit_helper.should =~ /text from a method/
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should expose the helper with the #helper method" do
|
26
|
+
helper.method_in_explicit_helper.should =~ /text from a method/
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have access to named routes" do
|
30
|
+
rspec_on_rails_specs_url.should == "http://test.host/rspec_on_rails_specs"
|
31
|
+
rspec_on_rails_specs_path.should == "/rspec_on_rails_specs"
|
32
|
+
|
33
|
+
helper.named_url.should == "http://test.host/rspec_on_rails_specs"
|
34
|
+
helper.named_path.should == "/rspec_on_rails_specs"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should fail if the helper method deson't exist" do
|
38
|
+
lambda { non_existent_helper_method }.should raise_error(NameError)
|
39
|
+
lambda { helper.non_existent_helper_method }.should raise_error(NameError)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should have access to session" do
|
43
|
+
session[:foo] = 'bar'
|
44
|
+
session_foo.should == 'bar'
|
45
|
+
helper.session_foo.should == 'bar'
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should have access to params" do
|
49
|
+
params[:foo] = 'bar'
|
50
|
+
params_foo.should == 'bar'
|
51
|
+
helper.params_foo.should == 'bar'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should have access to request" do
|
55
|
+
request.stub!(:thing).and_return('bar')
|
56
|
+
request_thing.should == 'bar'
|
57
|
+
helper.request_thing.should == 'bar'
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should have access to flash" do
|
61
|
+
flash[:thing] = 'camera'
|
62
|
+
flash_thing.should == 'camera'
|
63
|
+
helper.flash_thing.should == 'camera'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe HelperExampleGroup, "#eval_erb", :type => :helper do
|
68
|
+
helper_name :explicit
|
69
|
+
|
70
|
+
it "should support methods that accept blocks" do
|
71
|
+
eval_erb("<% prepend 'foo' do %>bar<% end %>").should == "foobar"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe HelperExampleGroup, ".fixtures", :type => :helper do
|
76
|
+
helper_name :explicit
|
77
|
+
fixtures :animals
|
78
|
+
|
79
|
+
it "should load fixtures" do
|
80
|
+
pig = animals(:pig)
|
81
|
+
pig.class.should == Animal
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should load global fixtures" do
|
85
|
+
lachie = people(:lachie)
|
86
|
+
lachie.class.should == Person
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "methods from standard helpers", :type => :helper do
|
91
|
+
helper_name :explicit
|
92
|
+
it "should be exposed to the helper" do
|
93
|
+
helper.link_to("Foo","http://bar").should have_tag("a")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe HelperExampleGroup, "included modules", :type => :helper do
|
98
|
+
helpers = [
|
99
|
+
ActionView::Helpers::ActiveRecordHelper,
|
100
|
+
ActionView::Helpers::AssetTagHelper,
|
101
|
+
ActionView::Helpers::BenchmarkHelper,
|
102
|
+
ActionView::Helpers::CacheHelper,
|
103
|
+
ActionView::Helpers::CaptureHelper,
|
104
|
+
ActionView::Helpers::DateHelper,
|
105
|
+
ActionView::Helpers::DebugHelper,
|
106
|
+
ActionView::Helpers::FormHelper,
|
107
|
+
ActionView::Helpers::FormOptionsHelper,
|
108
|
+
ActionView::Helpers::FormTagHelper,
|
109
|
+
ActionView::Helpers::JavaScriptHelper,
|
110
|
+
ActionView::Helpers::NumberHelper,
|
111
|
+
ActionView::Helpers::PrototypeHelper,
|
112
|
+
ActionView::Helpers::ScriptaculousHelper,
|
113
|
+
ActionView::Helpers::TagHelper,
|
114
|
+
ActionView::Helpers::TextHelper,
|
115
|
+
ActionView::Helpers::UrlHelper
|
116
|
+
]
|
117
|
+
helpers.each do |helper_module|
|
118
|
+
it "should include #{helper_module}" do
|
119
|
+
self.class.ancestors.should include(helper_module)
|
120
|
+
helper.class.ancestors.should include(helper_module)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
# TODO: BT - Helper Examples should proxy method_missing to a Rails View instance.
|
126
|
+
# When that is done, remove this method
|
127
|
+
describe HelperExampleGroup, "#protect_against_forgery?", :type => :helper do
|
128
|
+
it "should return false" do
|
129
|
+
protect_against_forgery?.should be_false
|
130
|
+
helper.protect_against_forgery?.should be_false
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe HelperExampleGroup, "#assigns", :type => :helper do
|
135
|
+
helper_name :addition
|
136
|
+
it "should expose variables to helper" do
|
137
|
+
assigns[:addend] = 3
|
138
|
+
helper.plus(4).should == 7
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should make helper ivars available in example" do
|
142
|
+
assigns[:addend] = 3
|
143
|
+
assigns[:addend].should == 3
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe HelperExampleGroup, "using a helper that uses output_buffer inside helper", :type => :helper do
|
148
|
+
helper_name :explicit
|
149
|
+
|
150
|
+
before(:each) do
|
151
|
+
if Rails::VERSION::STRING <= "2.1"
|
152
|
+
pending("need to get this new feature working against pre 2.2 versions of rails")
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should not raise an error" do
|
157
|
+
lambda { method_using_output_buffer }.should_not raise_error
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should put the output in the output_buffer" do
|
161
|
+
method_using_output_buffer
|
162
|
+
output_buffer.should == "the_text_from_concat"
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
describe HelperExampleGroup, "using a helper that tries to access @template", :type => :helper do
|
167
|
+
helper_name :explicit
|
168
|
+
|
169
|
+
it "should not raise an error" do
|
170
|
+
lambda { method_using_template }.should_not raise_error
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should have the correct output" do
|
174
|
+
method_using_template.should have_text(/#some_id/)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
module Bug11223
|
183
|
+
# see http://rubyforge.org/tracker/index.php?func=detail&aid=11223&group_id=797&atid=3149
|
184
|
+
describe 'Accessing flash from helper spec', :type => :helper do
|
185
|
+
it 'should not raise an error' do
|
186
|
+
lambda { flash['test'] }.should_not raise_error
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
module Spec
|
192
|
+
module Rails
|
193
|
+
module Example
|
194
|
+
describe HelperExampleGroup do
|
195
|
+
it "should clear its name from the description" do
|
196
|
+
group = describe("foo", :type => :helper) do
|
197
|
+
$nested_group = describe("bar") do
|
198
|
+
end
|
199
|
+
end
|
200
|
+
group.description.to_s.should == "foo"
|
201
|
+
$nested_group.description.to_s.should == "foo bar"
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
module Bug719
|
209
|
+
# see http://rspec.lighthouseapp.com/projects/5645/tickets/719
|
210
|
+
# FIXME - helper and example provided in ticket. The example did
|
211
|
+
# fail initially, so running it now shows that the bug is fixed,
|
212
|
+
# but this doesn't serve as a good internal example.
|
213
|
+
module ImagesHelper
|
214
|
+
def hide_images_button
|
215
|
+
content_tag :div, :class => :hide_images_button do
|
216
|
+
button_to_function "Hide Images", :id => :hide_images_button do |page|
|
217
|
+
page[:more_images_button].toggle
|
218
|
+
page[:image_browser].toggle
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
describe ImagesHelper, :type => :helper do
|
225
|
+
it "should render a hide_images_button" do
|
226
|
+
helper.hide_images_button.should have_tag('div[class=?]','hide_images_button') do
|
227
|
+
with_tag('input[id=?][type=?][value=?][onclick^=?]',
|
228
|
+
'hide_images_button', 'button', 'Hide Images',
|
229
|
+
"$("more_images_button").toggle();\n$("image_browser").toggle();;")
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Rails
|
5
|
+
module Example
|
6
|
+
describe ModelExampleGroup do
|
7
|
+
accesses_configured_helper_methods
|
8
|
+
|
9
|
+
it "clears its name from the description" do
|
10
|
+
group = describe("foo", :type => :model) do
|
11
|
+
$nested_group = describe("bar") do
|
12
|
+
end
|
13
|
+
end
|
14
|
+
group.description.to_s.should == "foo"
|
15
|
+
$nested_group.description.to_s.should == "foo bar"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
require 'controller_spec_controller'
|
3
|
+
require File.join(File.dirname(__FILE__), "/shared_routing_example_group_examples.rb")
|
4
|
+
|
5
|
+
describe "Routing Examples", :type => :routing do
|
6
|
+
|
7
|
+
include RoutingExampleGroupSpec
|
8
|
+
|
9
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class CustomRouteSpecController < ActionController::Base; end
|
2
|
+
class RspecOnRailsSpecsController < ActionController::Base; end
|
3
|
+
|
4
|
+
share_as :RoutingExampleGroupSpec do
|
5
|
+
it "support custom routes" do
|
6
|
+
route_for(:controller => "custom_route_spec", :action => "custom_route").
|
7
|
+
should == "/custom_route"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "support existing routes" do
|
11
|
+
route_for(:controller => "controller_spec", :action => "some_action").
|
12
|
+
should == "/controller_spec/some_action"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "support existing routes with additional parameters" do
|
16
|
+
route_for(:controller => "controller_spec", :action => "some_action", :param => '1').
|
17
|
+
should == "/controller_spec/some_action?param=1"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "recognize routes with methods besides :get" do
|
21
|
+
route_for(:controller => "rspec_on_rails_specs", :action => "update", :id => "37").
|
22
|
+
should == {:path => "/rspec_on_rails_specs/37", :method => :put}
|
23
|
+
end
|
24
|
+
|
25
|
+
it "generate params for custom routes" do
|
26
|
+
params_from(:get, '/custom_route').
|
27
|
+
should == {:controller => "custom_route_spec", :action => "custom_route"}
|
28
|
+
end
|
29
|
+
|
30
|
+
it "generate params for existing routes" do
|
31
|
+
params_from(:get, '/controller_spec/some_action').
|
32
|
+
should == {:controller => "controller_spec", :action => "some_action"}
|
33
|
+
end
|
34
|
+
|
35
|
+
it "generate params for an existing route with a query parameter" do
|
36
|
+
params_from(:get, '/controller_spec/some_action?param=1').
|
37
|
+
should == {:controller => "controller_spec", :action => "some_action", :param => '1'}
|
38
|
+
end
|
39
|
+
|
40
|
+
it "generate params for an existing route with multiple query parameters" do
|
41
|
+
params_from(:get, '/controller_spec/some_action?param1=1¶m2=2').
|
42
|
+
should == {:controller => "controller_spec", :action => "some_action", :param1 => '1', :param2 => '2' }
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
|
3
|
+
describe "assert_equal", :shared => true do
|
4
|
+
it "like assert_equal" do
|
5
|
+
assert_equal 1, 1
|
6
|
+
lambda {
|
7
|
+
assert_equal 1, 2
|
8
|
+
}.should raise_error(::Test::Unit::AssertionFailedError)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "A model spec should be able to access 'test/unit' assertions", :type => :model do
|
13
|
+
it_should_behave_like "assert_equal"
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "A view spec should be able to access 'test/unit' assertions", :type => :view do
|
17
|
+
it_should_behave_like "assert_equal"
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "A helper spec should be able to access 'test/unit' assertions", :type => :helper do
|
21
|
+
it_should_behave_like "assert_equal"
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "A controller spec with integrated views should be able to access 'test/unit' assertions", :type => :controller do
|
25
|
+
controller_name :controller_spec
|
26
|
+
integrate_views
|
27
|
+
it_should_behave_like "assert_equal"
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "A controller spec should be able to access 'test/unit' assertions", :type => :controller do
|
31
|
+
controller_name :controller_spec
|
32
|
+
it_should_behave_like "assert_equal"
|
33
|
+
end
|