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.
- data/.gitignore +1 -7
- data/README.markdown +58 -0
- data/Rakefile +51 -9
- data/example_app_template.rb +33 -0
- data/lib/generators/rspec.rb +25 -0
- data/lib/generators/rspec/controller/controller_generator.rb +26 -0
- data/lib/generators/rspec/controller/templates/controller_spec.rb +15 -0
- data/lib/generators/rspec/controller/templates/view_spec.rb +12 -0
- data/lib/generators/rspec/helper/helper_generator.rb +11 -0
- data/lib/generators/rspec/helper/templates/helper_spec.rb +14 -0
- data/lib/generators/rspec/install/install_generator.rb +29 -0
- data/lib/generators/rspec/install/templates/lib/tasks/rspec.rake +119 -0
- data/lib/generators/rspec/install/templates/script/rspec.tt +4 -0
- data/{generators/rspec/templates → lib/generators/rspec/install/templates/spec}/rcov.opts +0 -0
- data/{generators/rspec/templates → lib/generators/rspec/install/templates/spec}/spec.opts +0 -0
- data/{generators/rspec/templates → lib/generators/rspec/install/templates/spec}/spec_helper.rb +14 -12
- data/lib/generators/rspec/integration/integration_generator.rb +12 -0
- data/{generators/integration_spec/templates/integration_spec.rb → lib/generators/rspec/integration/templates/request_spec.rb} +0 -0
- data/lib/generators/rspec/mailer/mailer_generator.rb +21 -0
- data/lib/generators/rspec/mailer/templates/fixture +3 -0
- data/lib/generators/rspec/mailer/templates/mailer_spec.rb +14 -0
- data/lib/generators/rspec/model/model_generator.rb +22 -0
- data/lib/generators/rspec/model/templates/fixtures.yml +19 -0
- data/{generators/rspec_model → lib/generators/rspec/model}/templates/model_spec.rb +1 -1
- data/lib/generators/rspec/observer/observer_generator.rb +12 -0
- data/lib/generators/rspec/observer/templates/observer_spec.rb +5 -0
- data/lib/generators/rspec/plugin/plugin_generator.rb +11 -0
- data/lib/generators/rspec/plugin/templates/%file_name%_spec.rb.tt +5 -0
- data/lib/generators/rspec/plugin/templates/test_helper.rb +5 -0
- data/lib/generators/rspec/scaffold/scaffold_generator.rb +112 -0
- data/lib/generators/rspec/scaffold/templates/controller_spec.rb +127 -0
- data/{generators/rspec_scaffold/templates/edit_erb_spec.rb → lib/generators/rspec/scaffold/templates/edit_spec.rb} +3 -3
- data/{generators/rspec_scaffold/templates/index_erb_spec.rb → lib/generators/rspec/scaffold/templates/index_spec.rb} +4 -4
- data/{generators/rspec_scaffold/templates/new_erb_spec.rb → lib/generators/rspec/scaffold/templates/new_spec.rb} +3 -3
- data/{generators/rspec_scaffold → lib/generators/rspec/scaffold}/templates/routing_spec.rb +4 -0
- data/{generators/rspec_scaffold/templates/show_erb_spec.rb → lib/generators/rspec/scaffold/templates/show_spec.rb} +4 -4
- data/lib/rspec/rails.rb +2 -0
- data/lib/rspec/rails/example.rb +2 -0
- data/lib/rspec/rails/example/controller_example_group.rb +31 -0
- data/lib/rspec/rails/example/request_example_group.rb +26 -0
- data/lib/rspec/rails/matchers.rb +14 -0
- data/lib/rspec/rails/transactional_database_support.rb +38 -0
- data/lib/rspec/rails/version.rb +16 -0
- data/rspec-rails.gemspec +78 -18
- metadata +97 -321
- data/.document +0 -7
- data/Contribute.rdoc +0 -4
- data/Gemfile +0 -4
- data/Gemfile.lock +0 -27
- data/History.rdoc +0 -321
- data/License.txt +0 -33
- data/Manifest.txt +0 -165
- data/README.rdoc +0 -48
- data/TODO.txt +0 -17
- data/Upgrade.rdoc +0 -148
- data/generators/integration_spec/integration_spec_generator.rb +0 -10
- data/generators/rspec/CHANGES +0 -1
- data/generators/rspec/rspec_generator.rb +0 -72
- data/generators/rspec/templates/previous_failures.txt +0 -0
- data/generators/rspec/templates/rspec.rake +0 -144
- data/generators/rspec/templates/script/autospec +0 -6
- data/generators/rspec/templates/script/spec +0 -10
- data/generators/rspec_controller/USAGE +0 -33
- data/generators/rspec_controller/rspec_controller_generator.rb +0 -47
- data/generators/rspec_controller/templates/controller_spec.rb +0 -25
- data/generators/rspec_controller/templates/helper_spec.rb +0 -11
- data/generators/rspec_controller/templates/view_spec.rb +0 -12
- data/generators/rspec_default_values.rb +0 -28
- data/generators/rspec_model/USAGE +0 -18
- data/generators/rspec_model/rspec_model_generator.rb +0 -35
- data/generators/rspec_scaffold/rspec_scaffold_generator.rb +0 -154
- data/generators/rspec_scaffold/templates/controller_spec.rb +0 -131
- data/generators/rspec_scaffold/templates/helper_spec.rb +0 -11
- data/init.rb +0 -9
- data/lib/autotest/discover.rb +0 -5
- data/lib/autotest/rails_rspec.rb +0 -76
- data/lib/spec/rails.rb +0 -26
- data/lib/spec/rails/example.rb +0 -48
- data/lib/spec/rails/example/assigns_hash_proxy.rb +0 -39
- data/lib/spec/rails/example/controller_example_group.rb +0 -285
- data/lib/spec/rails/example/cookies_proxy.rb +0 -29
- data/lib/spec/rails/example/functional_example_group.rb +0 -106
- data/lib/spec/rails/example/helper_example_group.rb +0 -153
- data/lib/spec/rails/example/integration_example_group.rb +0 -16
- data/lib/spec/rails/example/model_example_group.rb +0 -15
- data/lib/spec/rails/example/render_observer.rb +0 -80
- data/lib/spec/rails/example/routing_example_group.rb +0 -16
- data/lib/spec/rails/example/routing_helpers.rb +0 -66
- data/lib/spec/rails/example/view_example_group.rb +0 -203
- data/lib/spec/rails/extensions.rb +0 -11
- data/lib/spec/rails/extensions/action_controller/rescue.rb +0 -42
- data/lib/spec/rails/extensions/action_controller/test_case.rb +0 -16
- data/lib/spec/rails/extensions/action_controller/test_response.rb +0 -21
- data/lib/spec/rails/extensions/action_view/base.rb +0 -35
- data/lib/spec/rails/extensions/active_record/base.rb +0 -45
- data/lib/spec/rails/extensions/active_support/test_case.rb +0 -7
- data/lib/spec/rails/extensions/spec/matchers/have.rb +0 -23
- data/lib/spec/rails/extensions/spec/runner/configuration.rb +0 -45
- data/lib/spec/rails/interop/testcase.rb +0 -14
- data/lib/spec/rails/matchers.rb +0 -32
- data/lib/spec/rails/matchers/ar_be_valid.rb +0 -27
- data/lib/spec/rails/matchers/assert_select.rb +0 -180
- data/lib/spec/rails/matchers/change.rb +0 -13
- data/lib/spec/rails/matchers/have_text.rb +0 -57
- data/lib/spec/rails/matchers/include_text.rb +0 -54
- data/lib/spec/rails/matchers/redirect_to.rb +0 -126
- data/lib/spec/rails/matchers/render_template.rb +0 -129
- data/lib/spec/rails/matchers/route_to.rb +0 -149
- data/lib/spec/rails/mocks.rb +0 -140
- data/lib/spec/rails/version.rb +0 -16
- data/spec/autotest/mappings_spec.rb +0 -86
- data/spec/rails_suite.rb +0 -7
- data/spec/resources/controllers/action_view_base_spec_controller.rb +0 -2
- data/spec/resources/controllers/application.rb +0 -9
- data/spec/resources/controllers/controller_spec_controller.rb +0 -127
- data/spec/resources/controllers/example.txt +0 -1
- data/spec/resources/controllers/redirect_spec_controller.rb +0 -70
- data/spec/resources/controllers/render_spec_controller.rb +0 -34
- data/spec/resources/controllers/rjs_spec_controller.rb +0 -58
- data/spec/resources/helpers/addition_helper.rb +0 -5
- data/spec/resources/helpers/explicit_helper.rb +0 -46
- data/spec/resources/helpers/more_explicit_helper.rb +0 -5
- data/spec/resources/helpers/plugin_application_helper.rb +0 -6
- data/spec/resources/helpers/view_spec_helper.rb +0 -13
- data/spec/resources/models/animal.rb +0 -4
- data/spec/resources/models/person.rb +0 -18
- data/spec/resources/models/thing.rb +0 -3
- 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 +0 -1
- data/spec/resources/views/controller_spec/action_setting_flash_before_session_reset.html.erb +0 -1
- 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 +0 -1
- data/spec/resources/views/controller_spec/action_with_template.html.erb +0 -1
- data/spec/resources/views/controller_spec/non_existent_action_with_existent_template.html.erb +0 -1
- 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 +0 -1
- 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 +0 -1
- data/spec/resources/views/rjs_spec/_replacement_partial.html.erb +0 -1
- data/spec/resources/views/rjs_spec/hide_div.js.rjs +0 -1
- data/spec/resources/views/rjs_spec/hide_page_element.js.rjs +0 -1
- data/spec/resources/views/rjs_spec/insert_html.js.rjs +0 -1
- data/spec/resources/views/rjs_spec/replace.js.rjs +0 -1
- data/spec/resources/views/rjs_spec/replace_html.js.rjs +0 -1
- data/spec/resources/views/rjs_spec/replace_html_with_partial.js.rjs +0 -1
- data/spec/resources/views/rjs_spec/visual_effect.js.rjs +0 -1
- data/spec/resources/views/rjs_spec/visual_toggle_effect.js.rjs +0 -1
- data/spec/resources/views/tag_spec/no_tags.html.erb +0 -1
- data/spec/resources/views/tag_spec/single_div_with_no_attributes.html.erb +0 -1
- data/spec/resources/views/tag_spec/single_div_with_one_attribute.html.erb +0 -1
- data/spec/resources/views/view_spec/_partial.html.erb +0 -2
- 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 +0 -1
- data/spec/resources/views/view_spec/_partial_with_sub_partial.html.erb +0 -1
- data/spec/resources/views/view_spec/_spacer.html.erb +0 -1
- data/spec/resources/views/view_spec/accessor.html.erb +0 -6
- data/spec/resources/views/view_spec/block_helper.html.erb +0 -3
- data/spec/resources/views/view_spec/entry_form.html.erb +0 -2
- data/spec/resources/views/view_spec/explicit_helper.html.erb +0 -2
- data/spec/resources/views/view_spec/foo/show.html.erb +0 -1
- data/spec/resources/views/view_spec/implicit_helper.html.erb +0 -2
- data/spec/resources/views/view_spec/multiple_helpers.html.erb +0 -3
- data/spec/resources/views/view_spec/path_params.html.erb +0 -1
- data/spec/resources/views/view_spec/should_not_receive.html.erb +0 -3
- data/spec/resources/views/view_spec/template_with_partial.html.erb +0 -5
- data/spec/resources/views/view_spec/template_with_partial_using_collection.html.erb +0 -3
- data/spec/resources/views/view_spec/template_with_partial_with_array.html.erb +0 -1
- data/spec/resources/views/view_spec/view_helpers.html.erb +0 -1
- data/spec/spec/rails/example/assigns_hash_proxy_spec.rb +0 -109
- data/spec/spec/rails/example/configuration_spec.rb +0 -67
- data/spec/spec/rails/example/controller_example_group_spec.rb +0 -307
- data/spec/spec/rails/example/controller_isolation_spec.rb +0 -75
- data/spec/spec/rails/example/cookies_proxy_spec.rb +0 -87
- data/spec/spec/rails/example/error_handling_spec.rb +0 -90
- data/spec/spec/rails/example/example_group_factory_spec.rb +0 -112
- data/spec/spec/rails/example/helper_example_group_spec.rb +0 -247
- data/spec/spec/rails/example/model_example_group_spec.rb +0 -32
- data/spec/spec/rails/example/routing_example_group_spec.rb +0 -9
- data/spec/spec/rails/example/shared_routing_example_group_examples.rb +0 -237
- data/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb +0 -33
- data/spec/spec/rails/example/view_example_group_spec.rb +0 -346
- data/spec/spec/rails/extensions/action_view_base_spec.rb +0 -79
- data/spec/spec/rails/extensions/active_record_spec.rb +0 -14
- data/spec/spec/rails/interop/testcase_spec.rb +0 -70
- data/spec/spec/rails/matchers/ar_be_valid_spec.rb +0 -19
- data/spec/spec/rails/matchers/assert_select_spec.rb +0 -835
- data/spec/spec/rails/matchers/errors_on_spec.rb +0 -37
- data/spec/spec/rails/matchers/have_text_spec.rb +0 -69
- data/spec/spec/rails/matchers/include_text_spec.rb +0 -62
- data/spec/spec/rails/matchers/redirect_to_spec.rb +0 -253
- data/spec/spec/rails/matchers/render_template_spec.rb +0 -208
- data/spec/spec/rails/matchers/should_change_spec.rb +0 -15
- data/spec/spec/rails/mocks/ar_classes.rb +0 -10
- data/spec/spec/rails/mocks/mock_model_spec.rb +0 -112
- data/spec/spec/rails/mocks/stub_model_spec.rb +0 -80
- data/spec/spec/rails/sample_modified_fixture.rb +0 -8
- data/spec/spec/rails/sample_spec.rb +0 -8
- data/spec/spec/rails/spec_spec.rb +0 -11
- 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.
|
data/lib/autotest/discover.rb
DELETED
data/lib/autotest/rails_rspec.rb
DELETED
@@ -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
|
data/lib/spec/rails.rb
DELETED
@@ -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
|
-
|
data/lib/spec/rails/example.rb
DELETED
@@ -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
|