rspec-rails 1.3.4 → 2.0.0.a2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. data/.gitignore +1 -7
  2. data/README.markdown +58 -0
  3. data/Rakefile +51 -9
  4. data/example_app_template.rb +33 -0
  5. data/lib/generators/rspec.rb +25 -0
  6. data/lib/generators/rspec/controller/controller_generator.rb +26 -0
  7. data/lib/generators/rspec/controller/templates/controller_spec.rb +15 -0
  8. data/lib/generators/rspec/controller/templates/view_spec.rb +12 -0
  9. data/lib/generators/rspec/helper/helper_generator.rb +11 -0
  10. data/lib/generators/rspec/helper/templates/helper_spec.rb +14 -0
  11. data/lib/generators/rspec/install/install_generator.rb +29 -0
  12. data/lib/generators/rspec/install/templates/lib/tasks/rspec.rake +119 -0
  13. data/lib/generators/rspec/install/templates/script/rspec.tt +4 -0
  14. data/{generators/rspec/templates → lib/generators/rspec/install/templates/spec}/rcov.opts +0 -0
  15. data/{generators/rspec/templates → lib/generators/rspec/install/templates/spec}/spec.opts +0 -0
  16. data/{generators/rspec/templates → lib/generators/rspec/install/templates/spec}/spec_helper.rb +14 -12
  17. data/lib/generators/rspec/integration/integration_generator.rb +12 -0
  18. data/{generators/integration_spec/templates/integration_spec.rb → lib/generators/rspec/integration/templates/request_spec.rb} +0 -0
  19. data/lib/generators/rspec/mailer/mailer_generator.rb +21 -0
  20. data/lib/generators/rspec/mailer/templates/fixture +3 -0
  21. data/lib/generators/rspec/mailer/templates/mailer_spec.rb +14 -0
  22. data/lib/generators/rspec/model/model_generator.rb +22 -0
  23. data/lib/generators/rspec/model/templates/fixtures.yml +19 -0
  24. data/{generators/rspec_model → lib/generators/rspec/model}/templates/model_spec.rb +1 -1
  25. data/lib/generators/rspec/observer/observer_generator.rb +12 -0
  26. data/lib/generators/rspec/observer/templates/observer_spec.rb +5 -0
  27. data/lib/generators/rspec/plugin/plugin_generator.rb +11 -0
  28. data/lib/generators/rspec/plugin/templates/%file_name%_spec.rb.tt +5 -0
  29. data/lib/generators/rspec/plugin/templates/test_helper.rb +5 -0
  30. data/lib/generators/rspec/scaffold/scaffold_generator.rb +112 -0
  31. data/lib/generators/rspec/scaffold/templates/controller_spec.rb +127 -0
  32. data/{generators/rspec_scaffold/templates/edit_erb_spec.rb → lib/generators/rspec/scaffold/templates/edit_spec.rb} +3 -3
  33. data/{generators/rspec_scaffold/templates/index_erb_spec.rb → lib/generators/rspec/scaffold/templates/index_spec.rb} +4 -4
  34. data/{generators/rspec_scaffold/templates/new_erb_spec.rb → lib/generators/rspec/scaffold/templates/new_spec.rb} +3 -3
  35. data/{generators/rspec_scaffold → lib/generators/rspec/scaffold}/templates/routing_spec.rb +4 -0
  36. data/{generators/rspec_scaffold/templates/show_erb_spec.rb → lib/generators/rspec/scaffold/templates/show_spec.rb} +4 -4
  37. data/lib/rspec/rails.rb +2 -0
  38. data/lib/rspec/rails/example.rb +2 -0
  39. data/lib/rspec/rails/example/controller_example_group.rb +31 -0
  40. data/lib/rspec/rails/example/request_example_group.rb +26 -0
  41. data/lib/rspec/rails/matchers.rb +14 -0
  42. data/lib/rspec/rails/transactional_database_support.rb +38 -0
  43. data/lib/rspec/rails/version.rb +16 -0
  44. data/rspec-rails.gemspec +78 -18
  45. metadata +97 -321
  46. data/.document +0 -7
  47. data/Contribute.rdoc +0 -4
  48. data/Gemfile +0 -4
  49. data/Gemfile.lock +0 -27
  50. data/History.rdoc +0 -321
  51. data/License.txt +0 -33
  52. data/Manifest.txt +0 -165
  53. data/README.rdoc +0 -48
  54. data/TODO.txt +0 -17
  55. data/Upgrade.rdoc +0 -148
  56. data/generators/integration_spec/integration_spec_generator.rb +0 -10
  57. data/generators/rspec/CHANGES +0 -1
  58. data/generators/rspec/rspec_generator.rb +0 -72
  59. data/generators/rspec/templates/previous_failures.txt +0 -0
  60. data/generators/rspec/templates/rspec.rake +0 -144
  61. data/generators/rspec/templates/script/autospec +0 -6
  62. data/generators/rspec/templates/script/spec +0 -10
  63. data/generators/rspec_controller/USAGE +0 -33
  64. data/generators/rspec_controller/rspec_controller_generator.rb +0 -47
  65. data/generators/rspec_controller/templates/controller_spec.rb +0 -25
  66. data/generators/rspec_controller/templates/helper_spec.rb +0 -11
  67. data/generators/rspec_controller/templates/view_spec.rb +0 -12
  68. data/generators/rspec_default_values.rb +0 -28
  69. data/generators/rspec_model/USAGE +0 -18
  70. data/generators/rspec_model/rspec_model_generator.rb +0 -35
  71. data/generators/rspec_scaffold/rspec_scaffold_generator.rb +0 -154
  72. data/generators/rspec_scaffold/templates/controller_spec.rb +0 -131
  73. data/generators/rspec_scaffold/templates/helper_spec.rb +0 -11
  74. data/init.rb +0 -9
  75. data/lib/autotest/discover.rb +0 -5
  76. data/lib/autotest/rails_rspec.rb +0 -76
  77. data/lib/spec/rails.rb +0 -26
  78. data/lib/spec/rails/example.rb +0 -48
  79. data/lib/spec/rails/example/assigns_hash_proxy.rb +0 -39
  80. data/lib/spec/rails/example/controller_example_group.rb +0 -285
  81. data/lib/spec/rails/example/cookies_proxy.rb +0 -29
  82. data/lib/spec/rails/example/functional_example_group.rb +0 -106
  83. data/lib/spec/rails/example/helper_example_group.rb +0 -153
  84. data/lib/spec/rails/example/integration_example_group.rb +0 -16
  85. data/lib/spec/rails/example/model_example_group.rb +0 -15
  86. data/lib/spec/rails/example/render_observer.rb +0 -80
  87. data/lib/spec/rails/example/routing_example_group.rb +0 -16
  88. data/lib/spec/rails/example/routing_helpers.rb +0 -66
  89. data/lib/spec/rails/example/view_example_group.rb +0 -203
  90. data/lib/spec/rails/extensions.rb +0 -11
  91. data/lib/spec/rails/extensions/action_controller/rescue.rb +0 -42
  92. data/lib/spec/rails/extensions/action_controller/test_case.rb +0 -16
  93. data/lib/spec/rails/extensions/action_controller/test_response.rb +0 -21
  94. data/lib/spec/rails/extensions/action_view/base.rb +0 -35
  95. data/lib/spec/rails/extensions/active_record/base.rb +0 -45
  96. data/lib/spec/rails/extensions/active_support/test_case.rb +0 -7
  97. data/lib/spec/rails/extensions/spec/matchers/have.rb +0 -23
  98. data/lib/spec/rails/extensions/spec/runner/configuration.rb +0 -45
  99. data/lib/spec/rails/interop/testcase.rb +0 -14
  100. data/lib/spec/rails/matchers.rb +0 -32
  101. data/lib/spec/rails/matchers/ar_be_valid.rb +0 -27
  102. data/lib/spec/rails/matchers/assert_select.rb +0 -180
  103. data/lib/spec/rails/matchers/change.rb +0 -13
  104. data/lib/spec/rails/matchers/have_text.rb +0 -57
  105. data/lib/spec/rails/matchers/include_text.rb +0 -54
  106. data/lib/spec/rails/matchers/redirect_to.rb +0 -126
  107. data/lib/spec/rails/matchers/render_template.rb +0 -129
  108. data/lib/spec/rails/matchers/route_to.rb +0 -149
  109. data/lib/spec/rails/mocks.rb +0 -140
  110. data/lib/spec/rails/version.rb +0 -16
  111. data/spec/autotest/mappings_spec.rb +0 -86
  112. data/spec/rails_suite.rb +0 -7
  113. data/spec/resources/controllers/action_view_base_spec_controller.rb +0 -2
  114. data/spec/resources/controllers/application.rb +0 -9
  115. data/spec/resources/controllers/controller_spec_controller.rb +0 -127
  116. data/spec/resources/controllers/example.txt +0 -1
  117. data/spec/resources/controllers/redirect_spec_controller.rb +0 -70
  118. data/spec/resources/controllers/render_spec_controller.rb +0 -34
  119. data/spec/resources/controllers/rjs_spec_controller.rb +0 -58
  120. data/spec/resources/helpers/addition_helper.rb +0 -5
  121. data/spec/resources/helpers/explicit_helper.rb +0 -46
  122. data/spec/resources/helpers/more_explicit_helper.rb +0 -5
  123. data/spec/resources/helpers/plugin_application_helper.rb +0 -6
  124. data/spec/resources/helpers/view_spec_helper.rb +0 -13
  125. data/spec/resources/models/animal.rb +0 -4
  126. data/spec/resources/models/person.rb +0 -18
  127. data/spec/resources/models/thing.rb +0 -3
  128. data/spec/resources/views/controller_spec/_partial.html.erb +0 -0
  129. data/spec/resources/views/controller_spec/action_setting_flash_after_session_reset.html.erb +0 -1
  130. data/spec/resources/views/controller_spec/action_setting_flash_before_session_reset.html.erb +0 -1
  131. data/spec/resources/views/controller_spec/action_setting_the_assigns_hash.html.erb +0 -0
  132. data/spec/resources/views/controller_spec/action_with_errors_in_template.html.erb +0 -1
  133. data/spec/resources/views/controller_spec/action_with_template.html.erb +0 -1
  134. data/spec/resources/views/controller_spec/non_existent_action_with_existent_template.html.erb +0 -1
  135. data/spec/resources/views/layouts/application.html.erb +0 -0
  136. data/spec/resources/views/layouts/simple.html.erb +0 -0
  137. data/spec/resources/views/objects/_object.html.erb +0 -1
  138. data/spec/resources/views/render_spec/_a_partial.html.erb +0 -0
  139. data/spec/resources/views/render_spec/action_with_alternate_layout.html.erb +0 -0
  140. data/spec/resources/views/render_spec/some_action.html.erb +0 -0
  141. data/spec/resources/views/render_spec/some_action.js.rjs +0 -1
  142. data/spec/resources/views/rjs_spec/_replacement_partial.html.erb +0 -1
  143. data/spec/resources/views/rjs_spec/hide_div.js.rjs +0 -1
  144. data/spec/resources/views/rjs_spec/hide_page_element.js.rjs +0 -1
  145. data/spec/resources/views/rjs_spec/insert_html.js.rjs +0 -1
  146. data/spec/resources/views/rjs_spec/replace.js.rjs +0 -1
  147. data/spec/resources/views/rjs_spec/replace_html.js.rjs +0 -1
  148. data/spec/resources/views/rjs_spec/replace_html_with_partial.js.rjs +0 -1
  149. data/spec/resources/views/rjs_spec/visual_effect.js.rjs +0 -1
  150. data/spec/resources/views/rjs_spec/visual_toggle_effect.js.rjs +0 -1
  151. data/spec/resources/views/tag_spec/no_tags.html.erb +0 -1
  152. data/spec/resources/views/tag_spec/single_div_with_no_attributes.html.erb +0 -1
  153. data/spec/resources/views/tag_spec/single_div_with_one_attribute.html.erb +0 -1
  154. data/spec/resources/views/view_spec/_partial.html.erb +0 -2
  155. data/spec/resources/views/view_spec/_partial_used_twice.html.erb +0 -0
  156. data/spec/resources/views/view_spec/_partial_with_local_variable.html.erb +0 -1
  157. data/spec/resources/views/view_spec/_partial_with_sub_partial.html.erb +0 -1
  158. data/spec/resources/views/view_spec/_spacer.html.erb +0 -1
  159. data/spec/resources/views/view_spec/accessor.html.erb +0 -6
  160. data/spec/resources/views/view_spec/block_helper.html.erb +0 -3
  161. data/spec/resources/views/view_spec/entry_form.html.erb +0 -2
  162. data/spec/resources/views/view_spec/explicit_helper.html.erb +0 -2
  163. data/spec/resources/views/view_spec/foo/show.html.erb +0 -1
  164. data/spec/resources/views/view_spec/implicit_helper.html.erb +0 -2
  165. data/spec/resources/views/view_spec/multiple_helpers.html.erb +0 -3
  166. data/spec/resources/views/view_spec/path_params.html.erb +0 -1
  167. data/spec/resources/views/view_spec/should_not_receive.html.erb +0 -3
  168. data/spec/resources/views/view_spec/template_with_partial.html.erb +0 -5
  169. data/spec/resources/views/view_spec/template_with_partial_using_collection.html.erb +0 -3
  170. data/spec/resources/views/view_spec/template_with_partial_with_array.html.erb +0 -1
  171. data/spec/resources/views/view_spec/view_helpers.html.erb +0 -1
  172. data/spec/spec/rails/example/assigns_hash_proxy_spec.rb +0 -109
  173. data/spec/spec/rails/example/configuration_spec.rb +0 -67
  174. data/spec/spec/rails/example/controller_example_group_spec.rb +0 -307
  175. data/spec/spec/rails/example/controller_isolation_spec.rb +0 -75
  176. data/spec/spec/rails/example/cookies_proxy_spec.rb +0 -87
  177. data/spec/spec/rails/example/error_handling_spec.rb +0 -90
  178. data/spec/spec/rails/example/example_group_factory_spec.rb +0 -112
  179. data/spec/spec/rails/example/helper_example_group_spec.rb +0 -247
  180. data/spec/spec/rails/example/model_example_group_spec.rb +0 -32
  181. data/spec/spec/rails/example/routing_example_group_spec.rb +0 -9
  182. data/spec/spec/rails/example/shared_routing_example_group_examples.rb +0 -237
  183. data/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb +0 -33
  184. data/spec/spec/rails/example/view_example_group_spec.rb +0 -346
  185. data/spec/spec/rails/extensions/action_view_base_spec.rb +0 -79
  186. data/spec/spec/rails/extensions/active_record_spec.rb +0 -14
  187. data/spec/spec/rails/interop/testcase_spec.rb +0 -70
  188. data/spec/spec/rails/matchers/ar_be_valid_spec.rb +0 -19
  189. data/spec/spec/rails/matchers/assert_select_spec.rb +0 -835
  190. data/spec/spec/rails/matchers/errors_on_spec.rb +0 -37
  191. data/spec/spec/rails/matchers/have_text_spec.rb +0 -69
  192. data/spec/spec/rails/matchers/include_text_spec.rb +0 -62
  193. data/spec/spec/rails/matchers/redirect_to_spec.rb +0 -253
  194. data/spec/spec/rails/matchers/render_template_spec.rb +0 -208
  195. data/spec/spec/rails/matchers/should_change_spec.rb +0 -15
  196. data/spec/spec/rails/mocks/ar_classes.rb +0 -10
  197. data/spec/spec/rails/mocks/mock_model_spec.rb +0 -112
  198. data/spec/spec/rails/mocks/stub_model_spec.rb +0 -80
  199. data/spec/spec/rails/sample_modified_fixture.rb +0 -8
  200. data/spec/spec/rails/sample_spec.rb +0 -8
  201. data/spec/spec/rails/spec_spec.rb +0 -11
  202. data/spec/spec_helper.rb +0 -78
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe <%= controller_class_name %>Helper do
4
-
5
- #Delete this example and add some real ones or delete this file
6
- it "is included in the helper object" do
7
- included_modules = (class << helper; self; end).send :included_modules
8
- included_modules.should include(<%= controller_class_name %>Helper)
9
- end
10
-
11
- end
data/init.rb DELETED
@@ -1,9 +0,0 @@
1
- # Placeholder to satisfy Rails.
2
- #
3
- # Do NOT add any require statements to this file. Doing
4
- # so will cause Rails to load this plugin all of the time.
5
- #
6
- # Running 'ruby script/generate rspec' will
7
- # generate spec/spec_helper.rb, which includes the necessary
8
- # require statements and configuration. This file should
9
- # be required by all of your spec files.
@@ -1,5 +0,0 @@
1
- Autotest.add_discovery do
2
- style = []
3
- style << "rails" if File.exist? 'config/environment.rb'
4
- style
5
- end
@@ -1,76 +0,0 @@
1
- # (c) Copyright 2006 Nick Sieger <nicksieger@gmail.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person
4
- # obtaining a copy of this software and associated documentation files
5
- # (the "Software"), to deal in the Software without restriction,
6
- # including without limitation the rights to use, copy, modify, merge,
7
- # publish, distribute, sublicense, and/or sell copies of the Software,
8
- # and to permit persons to whom the Software is furnished to do so,
9
- # subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be
12
- # included in all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
18
- # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19
- # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
- # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
22
-
23
- $:.push(*Dir["vendor/rails/*/lib"])
24
-
25
- require 'active_support'
26
- require 'autotest/rspec'
27
-
28
- Autotest.add_hook :initialize do |at|
29
- %w{config/ coverage/ db/ doc/ log/ public/ script/ tmp/ vendor/rails vendor/plugins previous_failures.txt}.each do |exception|
30
- at.add_exception(exception)
31
- end
32
-
33
- at.clear_mappings
34
-
35
- at.add_mapping(%r%^(test|spec)/fixtures/(.*).yml$%) { |_, m|
36
- ["spec/models/#{m[2].singularize}_spec.rb"] + at.files_matching(%r%^spec\/views\/#{m[2]}/.*_spec\.rb$%)
37
- }
38
- at.add_mapping(%r%^spec/(models|controllers|routing|views|helpers|lib)/.*rb$%) { |filename, _|
39
- filename
40
- }
41
- at.add_mapping(%r%^app/models/(.*)\.rb$%) { |_, m|
42
- ["spec/models/#{m[1]}_spec.rb"]
43
- }
44
- at.add_mapping(%r%^app/views/(.*)$%) { |_, m|
45
- at.files_matching %r%^spec/views/#{m[1]}_spec.rb$%
46
- }
47
- at.add_mapping(%r%^app/controllers/(.*)\.rb$%) { |_, m|
48
- if m[1] == "application"
49
- at.files_matching %r%^spec/controllers/.*_spec\.rb$%
50
- else
51
- ["spec/controllers/#{m[1]}_spec.rb"]
52
- end
53
- }
54
- at.add_mapping(%r%^app/helpers/(.*)_helper\.rb$%) { |_, m|
55
- if m[1] == "application" then
56
- at.files_matching(%r%^spec/(views|helpers)/.*_spec\.rb$%)
57
- else
58
- ["spec/helpers/#{m[1]}_helper_spec.rb"] + at.files_matching(%r%^spec\/views\/#{m[1]}/.*_spec\.rb$%)
59
- end
60
- }
61
- at.add_mapping(%r%^config/routes\.rb$%) {
62
- at.files_matching %r%^spec/(controllers|routing|views|helpers)/.*_spec\.rb$%
63
- }
64
- at.add_mapping(%r%^config/database\.yml$%) { |_, m|
65
- at.files_matching %r%^spec/models/.*_spec\.rb$%
66
- }
67
- at.add_mapping(%r%^(spec/(spec_helper|shared/.*)|config/(boot|environment(s/test)?))\.rb$%) {
68
- at.files_matching %r%^spec/(models|controllers|routing|views|helpers)/.*_spec\.rb$%
69
- }
70
- at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m|
71
- ["spec/lib/#{m[1]}_spec.rb"]
72
- }
73
- end
74
-
75
- class Autotest::RailsRspec < Autotest::Rspec
76
- end
@@ -1,26 +0,0 @@
1
- begin
2
- require_dependency 'application_controller'
3
- rescue MissingSourceFile
4
- require_dependency 'application'
5
- end
6
- require 'rack/utils'
7
-
8
- require 'action_controller/test_process'
9
- require 'action_controller/integration'
10
- require 'active_support/test_case'
11
- require 'active_record/fixtures' if defined?(ActiveRecord::Base)
12
-
13
- require 'spec/test/unit'
14
-
15
- require 'spec/rails/matchers'
16
- require 'spec/rails/mocks'
17
- require 'spec/rails/example'
18
- require 'spec/rails/extensions'
19
- require 'spec/rails/interop/testcase'
20
-
21
- Spec::Example::ExampleGroupFactory.default(ActiveSupport::TestCase)
22
-
23
- if ActionView::Base.respond_to?(:cache_template_extensions)
24
- ActionView::Base.cache_template_extensions = false
25
- end
26
-
@@ -1,48 +0,0 @@
1
- dir = File.dirname(__FILE__)
2
-
3
- require 'spec/rails/example/routing_helpers'
4
- require 'spec/rails/example/assigns_hash_proxy'
5
- require "spec/rails/example/render_observer"
6
- require "spec/rails/example/model_example_group"
7
- require "spec/rails/example/functional_example_group"
8
- require "spec/rails/example/controller_example_group"
9
- require "spec/rails/example/helper_example_group"
10
- require "spec/rails/example/view_example_group"
11
- require "spec/rails/example/routing_example_group"
12
- require "spec/rails/example/integration_example_group"
13
- require "spec/rails/example/cookies_proxy"
14
-
15
- module Spec
16
- module Rails
17
- # Spec::Rails::Example extends Spec::Example (RSpec's core Example module) to provide
18
- # Rails-specific contexts for describing Rails Models, Views, Controllers and Helpers.
19
- #
20
- # == Model Examples
21
- #
22
- # These are the equivalent of unit tests in Rails' built in testing. Ironically (for the traditional TDD'er) these are the only specs that we feel should actually interact with the database.
23
- #
24
- # See Spec::Rails::Example::ModelExampleGroup
25
- #
26
- # == Controller Examples
27
- #
28
- # These align somewhat with functional tests in rails, except that they do not actually render views (though you can force rendering of views if you prefer). Instead of setting expectations about what goes on a page, you set expectations about what templates get rendered.
29
- #
30
- # See Spec::Rails::Example::ControllerExampleGroup
31
- #
32
- # == View Examples
33
- #
34
- # This is the other half of Rails functional testing. View specs allow you to set up assigns and render
35
- # a template. By assigning mock model data, you can specify view behaviour with no dependency on a database
36
- # or your real models.
37
- #
38
- # See Spec::Rails::Example::ViewExampleGroup
39
- #
40
- # == Helper Examples
41
- #
42
- # These let you specify directly methods that live in your helpers.
43
- #
44
- # See Spec::Rails::Example::HelperExampleGroup
45
- module Example
46
- end
47
- end
48
- end
@@ -1,39 +0,0 @@
1
- module Spec
2
- module Rails
3
- module Example
4
- class AssignsHashProxy #:nodoc:
5
- def initialize(example_group, &block)
6
- @target = block.call
7
- @example_group = example_group
8
- end
9
-
10
- def [](key)
11
- return false if false == assigns[key] || false == assigns[key.to_s]
12
- assigns[key] || assigns[key.to_s] || @target.instance_variable_get("@#{key}")
13
- end
14
-
15
- def []=(key, val)
16
- @target.instance_variable_set("@#{key}", val)
17
- end
18
-
19
- def delete(key)
20
- assigns.delete(key.to_s)
21
- @target.instance_variable_set("@#{key}", nil)
22
- end
23
-
24
- def each(&block)
25
- assigns.each &block
26
- end
27
-
28
- def has_key?(key)
29
- assigns.key?(key.to_s)
30
- end
31
-
32
- protected
33
- def assigns
34
- @example_group.orig_assigns
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,285 +0,0 @@
1
- module Spec
2
- module Rails
3
- module Example
4
- # Controller Examples live in $RAILS_ROOT/spec/controllers/.
5
- #
6
- # Controller Examples use Spec::Rails::Example::ControllerExampleGroup,
7
- # which supports running specs for Controllers in two modes, which
8
- # represent the tension between the more granular testing common in TDD
9
- # and the more high level testing built into rails. BDD sits somewhere
10
- # in between: we want to a balance between specs that are close enough
11
- # to the code to enable quick fault isolation and far enough away from
12
- # the code to enable refactoring with minimal changes to the existing
13
- # specs.
14
- #
15
- # == Isolation mode (default)
16
- #
17
- # No dependencies on views because none are ever rendered. The benefit
18
- # of this mode is that can spec the controller completely independent of
19
- # the view, allowing that responsibility to be handled later, or by
20
- # somebody else. Combined w/ separate view specs, this also provides
21
- # better fault isolation.
22
- #
23
- # == Integration mode
24
- #
25
- # To run in this mode, include the +integrate_views+ declaration
26
- # in your controller context:
27
- #
28
- # describe ThingController do
29
- # integrate_views
30
- # ...
31
- #
32
- # In this mode, controller specs are run in the same way that rails
33
- # functional tests run - one set of tests for both the controllers and
34
- # the views. The benefit of this approach is that you get wider coverage
35
- # from each spec. Experienced rails developers may find this an easier
36
- # approach to begin with, however we encourage you to explore using the
37
- # isolation mode and revel in its benefits.
38
- #
39
- # == Expecting Errors
40
- #
41
- # Rspec on Rails will raise errors that occur in controller actions and
42
- # are not rescued or handeled with rescue_from.
43
- #
44
- class ControllerExampleGroup < FunctionalExampleGroup
45
- class << self
46
-
47
- # Use integrate_views to instruct RSpec to render views in
48
- # your controller examples in Integration mode.
49
- #
50
- # describe ThingController do
51
- # integrate_views
52
- # ...
53
- #
54
- # See Spec::Rails::Example::ControllerExampleGroup for more
55
- # information about Integration and Isolation modes.
56
- def integrate_views(integrate_views = true)
57
- @integrate_views = integrate_views
58
- end
59
-
60
- def integrate_views? # :nodoc:
61
- @integrate_views
62
- end
63
-
64
- def inherited(klass) # :nodoc:
65
- klass.integrate_views(integrate_views?)
66
- klass.subject { controller }
67
- super
68
- end
69
-
70
- def set_description(*args) # :nodoc:
71
- super
72
- if described_class && described_class.ancestors.include?(ActionController::Base)
73
- controller_klass = if superclass.controller_class.ancestors.include?(ActionController::Base)
74
- superclass.controller_class
75
- else
76
- described_class
77
- end
78
- tests controller_klass
79
- end
80
- end
81
-
82
- # When you don't pass a controller to describe, like this:
83
- #
84
- # describe ThingsController do
85
- #
86
- # ... then you must provide a controller_name within the context of
87
- # your controller specs:
88
- #
89
- # describe "ThingController" do
90
- # controller_name :thing
91
- # ...
92
- def controller_name(name)
93
- tests "#{name}_controller".camelize.constantize
94
- end
95
- end
96
-
97
- before(:each) do
98
- # Some Rails apps explicitly disable ActionMailer in environment.rb
99
- if defined?(ActionMailer)
100
- @deliveries = []
101
- ActionMailer::Base.deliveries = @deliveries
102
- end
103
-
104
- unless @controller.class.ancestors.include?(ActionController::Base)
105
- Spec::Expectations.fail_with <<-MESSAGE
106
- Controller specs need to know what controller is being specified. You can
107
- indicate this by passing the controller to describe():
108
-
109
- describe MyController do
110
-
111
- or by declaring the controller's name
112
-
113
- describe "a MyController" do
114
- controller_name :my #invokes the MyController
115
- end
116
- MESSAGE
117
- end
118
- @controller.extend ControllerInstanceMethods
119
- @controller.integrate_views! if integrate_views?
120
- @controller.session = session
121
- end
122
-
123
- attr_reader :response, :request, :controller
124
-
125
- def integrate_views?
126
- @integrate_views || self.class.integrate_views?
127
- end
128
-
129
- # Bypasses any error rescues defined with rescue_from. Useful
130
- # in cases in which you want to specify errors coming out of
131
- # actions that might be caught by a rescue_from clause that is
132
- # specified separately.
133
- #
134
- # Note that this will override the effect of rescue_action_in_public
135
- def bypass_rescue
136
- if ::Rails::VERSION::STRING >= '2.2'
137
- def controller.rescue_action(exception)
138
- raise exception
139
- end
140
- else
141
- def controller.rescue_action_with_handler(exception)
142
- raise exception
143
- end
144
- end
145
- end
146
-
147
- protected
148
-
149
- def _assigns_hash_proxy
150
- @_assigns_hash_proxy ||= AssignsHashProxy.new(self) {@response.template}
151
- end
152
-
153
- private
154
-
155
- module TemplateIsolationExtensions
156
- def file_exists?(ignore); true; end
157
-
158
- def render_file(*args)
159
- @first_render ||= args[0] unless args[0] =~ /^layouts/
160
- end
161
-
162
- # Rails 2.2
163
- def _pick_template(*args)
164
- @_first_render ||= args[0] unless args[0] =~ /^layouts/
165
- PickedTemplate.new
166
- end
167
-
168
- def __action_exists?(params)
169
- controller.respond_to? params[:action]
170
- end
171
-
172
- def __template_exists?(args)
173
- self.view_paths.respond_to?(:find_template) ?
174
- self.view_paths.find_template(args[0][:file], template_format) :
175
- false
176
- end
177
-
178
- def render(*args)
179
- if ::Rails::VERSION::STRING >= "2.1"
180
- return super unless __action_exists?(params) || __template_exists?(args)
181
- end
182
- if file = args.last[:file].instance_eval{@template_path}
183
- record_render :file => file
184
- elsif args.last[:inline]
185
- super
186
- elsif @_rendered
187
- record_render(args[0])
188
- else
189
- super
190
- end
191
- end
192
-
193
- private
194
-
195
- def record_render(opts)
196
- return unless @_rendered
197
- @_rendered[:template] ||= opts[:file] if opts[:file]
198
- @_rendered[:partials][opts[:partial]] += 1 if opts[:partial]
199
- end
200
-
201
- # Returned by _pick_template when running controller examples in isolation mode.
202
- class PickedTemplate
203
- # Do nothing when running controller examples in isolation mode.
204
- def render_template(*ignore_args); end
205
- # Do nothing when running controller examples in isolation mode.
206
- def render_partial(*ignore_args); end
207
- end
208
- end
209
-
210
- module ControllerInstanceMethods # :nodoc:
211
- include Spec::Rails::Example::RenderObserver
212
-
213
- # === render(options = nil, extra_options={}, &block)
214
- #
215
- # This gets added to the controller's singleton meta class,
216
- # allowing Controller Examples to run in two modes, freely switching
217
- # from example group to example group.
218
- def render(options=nil, extra_options={}, &block)
219
- unless block_given?
220
- unless integrate_views?
221
- @template.extend TemplateIsolationExtensions
222
- end
223
- end
224
-
225
- if matching_message_expectation_exists(options)
226
- render_proxy.render(options, &block)
227
- @performed_render = true
228
- else
229
- if matching_stub_exists(options)
230
- @performed_render = true
231
- else
232
- if ::Rails::VERSION::STRING > '2.1'
233
- super(options, extra_options, &block)
234
- else
235
- super(options, &block)
236
- end
237
- end
238
- end
239
- end
240
-
241
- # Rails 2.3
242
- def default_template(action_name = self.action_name)
243
- if integrate_views?
244
- super
245
- else
246
- begin
247
- super
248
- rescue ActionView::MissingTemplate
249
- "#{self.class.name.sub(/Controller$/,'').underscore}/#{action_name}"
250
- end
251
- end
252
- end
253
-
254
- def response(&block)
255
- # NOTE - we're setting @update for the assert_select_spec - kinda weird, huh?
256
- @update = block
257
- super
258
- end
259
-
260
- def integrate_views!
261
- @integrate_views = true
262
- end
263
-
264
- private
265
-
266
- def integrate_views?
267
- @integrate_views
268
- end
269
-
270
- def matching_message_expectation_exists(options)
271
- render_proxy.__send__(:__mock_proxy).__send__(:find_matching_expectation, :render, options)
272
- end
273
-
274
- def matching_stub_exists(options)
275
- render_proxy.__send__(:__mock_proxy).__send__(:find_matching_method_stub, :render, options)
276
- end
277
-
278
- end
279
-
280
- Spec::Example::ExampleGroupFactory.register(:controller, self)
281
-
282
- end
283
- end
284
- end
285
- end