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,87 @@
1
+ require '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 '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 '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,247 @@
1
+ require '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.2"
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
+ # both specs the same as textmate invokes first-then-second but rake spec:plugins:rspec_on_rails invokes second-then-first
179
+ describe HelperExampleGroup, "new helper for each spec - instance variables side effects are isolated", :type=> :helper do
180
+ it 'should be able to set an instance variable on the helper on a new instance of the helper' do
181
+ helper.instance_variable_get(:@test_instance_var).should be_nil
182
+ helper.instance_variable_set(:@test_instance_var, :first_value)
183
+ helper.instance_variable_get(:@test_instance_var).should == :first_value
184
+ end
185
+
186
+ it 'should get a clean copy of the helper with no saved instance variables from the last run' do
187
+ helper.instance_variable_get(:@test_instance_var).should be_nil
188
+ helper.instance_variable_set(:@test_instance_var, :second_value)
189
+ helper.instance_variable_get(:@test_instance_var).should == :second_value
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
195
+
196
+ module Bug11223
197
+ # see http://rubyforge.org/tracker/index.php?func=detail&aid=11223&group_id=797&atid=3149
198
+ describe 'Accessing flash from helper spec', :type => :helper do
199
+ it 'should not raise an error' do
200
+ lambda { flash['test'] }.should_not raise_error
201
+ end
202
+ end
203
+ end
204
+
205
+ module Spec
206
+ module Rails
207
+ module Example
208
+ describe HelperExampleGroup do
209
+ it "should clear its name from the description" do
210
+ group = describe("foo", :type => :helper) do
211
+ $nested_group = describe("bar") do
212
+ end
213
+ end
214
+ group.description.to_s.should == "foo"
215
+ $nested_group.description.to_s.should == "foo bar"
216
+ end
217
+ end
218
+ end
219
+ end
220
+ end
221
+
222
+ module Bug719
223
+ # see http://rspec.lighthouseapp.com/projects/5645/tickets/719
224
+ # FIXME - helper and example provided in ticket. The example did
225
+ # fail initially, so running it now shows that the bug is fixed,
226
+ # but this doesn't serve as a good internal example.
227
+ module ImagesHelper
228
+ def hide_images_button
229
+ content_tag :div, :class => :hide_images_button do
230
+ button_to_function "Hide Images", :id => :hide_images_button do |page|
231
+ page[:more_images_button].toggle
232
+ page[:image_browser].toggle
233
+ end
234
+ end
235
+ end
236
+ end
237
+
238
+ describe ImagesHelper, :type => :helper do
239
+ it "should render a hide_images_button" do
240
+ helper.hide_images_button.should have_tag('div[class=?]','hide_images_button') do
241
+ with_tag('input[id=?][type=?][value=?][onclick^=?]',
242
+ 'hide_images_button', 'button', 'Hide Images',
243
+ "$(&quot;more_images_button&quot;).toggle();\n$(&quot;image_browser&quot;).toggle();;")
244
+ end
245
+ end
246
+ end
247
+ end