rspec-rails 1.3.2 → 7.0.2
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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data/.document +4 -6
- data/.yardopts +11 -0
- data/Capybara.md +28 -0
- data/Changelog.md +1343 -0
- data/LICENSE.md +25 -0
- data/README.md +383 -0
- data/lib/generators/rspec/channel/channel_generator.rb +12 -0
- data/lib/generators/rspec/channel/templates/channel_spec.rb.erb +7 -0
- data/lib/generators/rspec/controller/controller_generator.rb +51 -0
- data/lib/generators/rspec/controller/templates/controller_spec.rb +16 -0
- data/lib/generators/rspec/controller/templates/request_spec.rb +19 -0
- data/lib/generators/rspec/controller/templates/routing_spec.rb +13 -0
- data/lib/generators/rspec/controller/templates/view_spec.rb +5 -0
- data/lib/generators/rspec/feature/feature_generator.rb +29 -0
- data/lib/generators/rspec/feature/templates/feature_singular_spec.rb +5 -0
- data/lib/generators/rspec/feature/templates/feature_spec.rb +5 -0
- data/lib/generators/rspec/generator/generator_generator.rb +24 -0
- data/lib/generators/rspec/generator/templates/generator_spec.rb +5 -0
- data/lib/generators/rspec/helper/helper_generator.rb +16 -0
- data/lib/generators/rspec/helper/templates/helper_spec.rb +17 -0
- data/lib/generators/rspec/install/install_generator.rb +80 -0
- data/lib/generators/rspec/install/templates/spec/rails_helper.rb +89 -0
- data/lib/generators/rspec/job/job_generator.rb +13 -0
- data/lib/generators/rspec/job/templates/job_spec.rb.erb +7 -0
- data/lib/generators/rspec/mailbox/mailbox_generator.rb +14 -0
- data/lib/generators/rspec/mailbox/templates/mailbox_spec.rb.erb +7 -0
- data/lib/generators/rspec/mailer/mailer_generator.rb +30 -0
- data/lib/generators/rspec/mailer/templates/fixture +3 -0
- data/lib/generators/rspec/mailer/templates/mailer_spec.rb +25 -0
- data/lib/generators/rspec/mailer/templates/preview.rb +13 -0
- data/lib/generators/rspec/model/model_generator.rb +37 -0
- data/lib/generators/rspec/model/templates/fixtures.yml +19 -0
- data/lib/generators/rspec/model/templates/model_spec.rb +7 -0
- data/lib/generators/rspec/request/request_generator.rb +17 -0
- data/lib/generators/rspec/request/templates/request_spec.rb +10 -0
- data/lib/generators/rspec/scaffold/scaffold_generator.rb +136 -0
- data/lib/generators/rspec/scaffold/templates/api_controller_spec.rb +129 -0
- data/lib/generators/rspec/scaffold/templates/api_request_spec.rb +131 -0
- data/lib/generators/rspec/scaffold/templates/controller_spec.rb +145 -0
- data/lib/generators/rspec/scaffold/templates/edit_spec.rb +27 -0
- data/lib/generators/rspec/scaffold/templates/index_spec.rb +26 -0
- data/lib/generators/rspec/scaffold/templates/new_spec.rb +22 -0
- data/lib/generators/rspec/scaffold/templates/request_spec.rb +138 -0
- data/lib/generators/rspec/scaffold/templates/routing_spec.rb +46 -0
- data/lib/generators/rspec/scaffold/templates/show_spec.rb +21 -0
- data/lib/generators/rspec/system/system_generator.rb +24 -0
- data/lib/generators/rspec/system/templates/system_spec.rb +9 -0
- data/lib/generators/rspec/view/templates/view_spec.rb +5 -0
- data/lib/generators/rspec/view/view_generator.rb +22 -0
- data/lib/generators/rspec.rb +56 -0
- data/lib/rspec/rails/active_record.rb +25 -0
- data/lib/rspec/rails/adapters.rb +196 -0
- data/lib/rspec/rails/configuration.rb +222 -0
- data/lib/rspec/rails/example/channel_example_group.rb +93 -0
- data/lib/rspec/rails/example/controller_example_group.rb +217 -0
- data/lib/rspec/rails/example/feature_example_group.rb +53 -0
- data/lib/rspec/rails/example/helper_example_group.rb +42 -0
- data/lib/rspec/rails/example/job_example_group.rb +23 -0
- data/lib/rspec/rails/example/mailbox_example_group.rb +80 -0
- data/lib/rspec/rails/example/mailer_example_group.rb +38 -0
- data/lib/rspec/rails/example/model_example_group.rb +11 -0
- data/lib/rspec/rails/example/rails_example_group.rb +23 -0
- data/lib/rspec/rails/example/request_example_group.rb +27 -0
- data/lib/rspec/rails/example/routing_example_group.rb +61 -0
- data/lib/rspec/rails/example/system_example_group.rb +180 -0
- data/lib/rspec/rails/example/view_example_group.rb +214 -0
- data/lib/rspec/rails/example.rb +13 -0
- data/lib/rspec/rails/extensions/active_record/proxy.rb +11 -0
- data/lib/rspec/rails/extensions.rb +1 -0
- data/lib/rspec/rails/feature_check.rb +51 -0
- data/lib/rspec/rails/file_fixture_support.rb +18 -0
- data/lib/rspec/rails/fixture_file_upload_support.rb +45 -0
- data/lib/rspec/rails/fixture_support.rb +88 -0
- data/lib/rspec/rails/matchers/action_cable/have_broadcasted_to.rb +173 -0
- data/lib/rspec/rails/matchers/action_cable/have_streams.rb +58 -0
- data/lib/rspec/rails/matchers/action_cable.rb +65 -0
- data/lib/rspec/rails/matchers/action_mailbox.rb +73 -0
- data/lib/rspec/rails/matchers/active_job.rb +517 -0
- data/lib/rspec/rails/matchers/base_matcher.rb +179 -0
- data/lib/rspec/rails/matchers/be_a_new.rb +83 -0
- data/lib/rspec/rails/matchers/be_new_record.rb +30 -0
- data/lib/rspec/rails/matchers/be_valid.rb +49 -0
- data/lib/rspec/rails/matchers/have_enqueued_mail.rb +258 -0
- data/lib/rspec/rails/matchers/have_http_status.rb +381 -0
- data/lib/rspec/rails/matchers/have_rendered.rb +64 -0
- data/lib/rspec/rails/matchers/redirect_to.rb +38 -0
- data/lib/rspec/rails/matchers/relation_match_array.rb +3 -0
- data/lib/rspec/rails/matchers/routing_matchers.rb +125 -0
- data/lib/rspec/rails/matchers/send_email.rb +122 -0
- data/lib/rspec/rails/matchers.rb +36 -0
- data/lib/rspec/rails/tasks/rspec.rake +49 -0
- data/lib/rspec/rails/vendor/capybara.rb +32 -0
- data/lib/rspec/rails/version.rb +9 -0
- data/lib/rspec/rails/view_assigns.rb +27 -0
- data/lib/rspec/rails/view_path_builder.rb +29 -0
- data/lib/rspec/rails/view_rendering.rb +166 -0
- data/lib/rspec/rails/view_spec_methods.rb +56 -0
- data/lib/rspec/rails.rb +18 -0
- data/lib/rspec-rails.rb +97 -0
- data.tar.gz.sig +0 -0
- metadata +307 -261
- metadata.gz.sig +0 -0
- data/Contribute.rdoc +0 -4
- data/History.rdoc +0 -302
- data/License.txt +0 -33
- data/Manifest.txt +0 -165
- data/README.rdoc +0 -45
- data/Rakefile +0 -72
- data/TODO.txt +0 -17
- data/Upgrade.rdoc +0 -148
- data/generators/integration_spec/integration_spec_generator.rb +0 -10
- data/generators/integration_spec/templates/integration_spec.rb +0 -4
- 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/rcov.opts +0 -2
- 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/templates/spec.opts +0 -4
- data/generators/rspec/templates/spec_helper.rb +0 -54
- 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_model/templates/model_spec.rb +0 -13
- 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/edit_erb_spec.rb +0 -25
- data/generators/rspec_scaffold/templates/helper_spec.rb +0 -11
- data/generators/rspec_scaffold/templates/index_erb_spec.rb +0 -27
- data/generators/rspec_scaffold/templates/new_erb_spec.rb +0 -25
- data/generators/rspec_scaffold/templates/routing_spec.rb +0 -33
- data/generators/rspec_scaffold/templates/show_erb_spec.rb +0 -22
- data/init.rb +0 -9
- data/lib/autotest/discover.rb +0 -5
- data/lib/autotest/rails_rspec.rb +0 -76
- 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 -13
- data/lib/spec/rails/example/routing_helpers.rb +0 -66
- data/lib/spec/rails/example/view_example_group.rb +0 -199
- data/lib/spec/rails/example.rb +0 -48
- 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 -33
- 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 -44
- data/lib/spec/rails/extensions.rb +0 -11
- data/lib/spec/rails/interop/testcase.rb +0 -14
- 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/matchers.rb +0 -32
- data/lib/spec/rails/mocks.rb +0 -136
- data/lib/spec/rails/version.rb +0 -16
- data/lib/spec/rails.rb +0 -26
- 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/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 -65
- 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 -233
- data/spec/spec/rails/example/model_example_group_spec.rb +0 -32
- data/spec/spec/rails/example/routing_example_group_spec.rb +0 -10
- 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 -74
- 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 -109
- 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
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'rails/generators/named_base'
|
|
2
|
+
require 'rspec/core'
|
|
3
|
+
require 'rspec/rails/feature_check'
|
|
4
|
+
|
|
5
|
+
# @private
|
|
6
|
+
# Weirdly named generators namespace (should be `RSpec`) for compatibility with
|
|
7
|
+
# rails loading.
|
|
8
|
+
module Rspec
|
|
9
|
+
# @private
|
|
10
|
+
module Generators
|
|
11
|
+
# @private
|
|
12
|
+
class Base < ::Rails::Generators::NamedBase
|
|
13
|
+
include RSpec::Rails::FeatureCheck
|
|
14
|
+
|
|
15
|
+
def self.source_root(path = nil)
|
|
16
|
+
if path
|
|
17
|
+
@_rspec_source_root = path
|
|
18
|
+
else
|
|
19
|
+
@_rspec_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'rspec', generator_name, 'templates'))
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @private
|
|
24
|
+
# Load configuration from RSpec to ensure `--default-path` is set
|
|
25
|
+
def self.configuration
|
|
26
|
+
@configuration ||=
|
|
27
|
+
begin
|
|
28
|
+
configuration = RSpec.configuration
|
|
29
|
+
options = RSpec::Core::ConfigurationOptions.new({})
|
|
30
|
+
options.configure(configuration)
|
|
31
|
+
configuration
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def target_path(*paths)
|
|
36
|
+
File.join(self.class.configuration.default_path, *paths)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# @private
|
|
43
|
+
module Rails
|
|
44
|
+
module Generators
|
|
45
|
+
# @private
|
|
46
|
+
class GeneratedAttribute
|
|
47
|
+
def input_type
|
|
48
|
+
@input_type ||= if type == :text
|
|
49
|
+
"textarea"
|
|
50
|
+
else
|
|
51
|
+
"input"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module RSpec
|
|
2
|
+
module Rails
|
|
3
|
+
# Fake class to document RSpec ActiveRecord configuration options. In practice,
|
|
4
|
+
# these are dynamically added to the normal RSpec configuration object.
|
|
5
|
+
class ActiveRecordConfiguration
|
|
6
|
+
# @private
|
|
7
|
+
def self.initialize_activerecord_configuration(config)
|
|
8
|
+
config.before :suite do
|
|
9
|
+
# This allows dynamic columns etc to be used on ActiveRecord models when creating instance_doubles
|
|
10
|
+
if defined?(ActiveRecord) && defined?(ActiveRecord::Base) && defined?(::RSpec::Mocks) && (::RSpec::Mocks.respond_to?(:configuration))
|
|
11
|
+
::RSpec::Mocks.configuration.when_declaring_verifying_double do |possible_model|
|
|
12
|
+
target = possible_model.target
|
|
13
|
+
|
|
14
|
+
if Class === target && ActiveRecord::Base > target && !target.abstract_class?
|
|
15
|
+
target.define_attribute_methods
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
initialize_activerecord_configuration RSpec.configuration
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
require 'delegate'
|
|
2
|
+
require 'active_support'
|
|
3
|
+
require 'active_support/concern'
|
|
4
|
+
require 'active_support/core_ext/string'
|
|
5
|
+
|
|
6
|
+
module RSpec
|
|
7
|
+
module Rails
|
|
8
|
+
# @private
|
|
9
|
+
def self.disable_testunit_autorun
|
|
10
|
+
# `Test::Unit::AutoRunner.need_auto_run=` was introduced to the test-unit
|
|
11
|
+
# gem in version 2.4.9. Previous to this version `Test::Unit.run=` was
|
|
12
|
+
# used. The implementation of test-unit included with Ruby has neither
|
|
13
|
+
# method.
|
|
14
|
+
if defined?(Test::Unit::AutoRunner.need_auto_run = ())
|
|
15
|
+
Test::Unit::AutoRunner.need_auto_run = false
|
|
16
|
+
elsif defined?(Test::Unit.run = ())
|
|
17
|
+
Test::Unit.run = false
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
private_class_method :disable_testunit_autorun
|
|
21
|
+
|
|
22
|
+
if defined?(Kernel.gem)
|
|
23
|
+
gem 'minitest'
|
|
24
|
+
else
|
|
25
|
+
require 'minitest'
|
|
26
|
+
end
|
|
27
|
+
require 'minitest/assertions'
|
|
28
|
+
# Constant aliased to either Minitest or TestUnit, depending on what is
|
|
29
|
+
# loaded.
|
|
30
|
+
Assertions = Minitest::Assertions
|
|
31
|
+
|
|
32
|
+
# @private
|
|
33
|
+
class AssertionDelegator < Module
|
|
34
|
+
def initialize(*assertion_modules)
|
|
35
|
+
assertion_class = Class.new(SimpleDelegator) do
|
|
36
|
+
include ::RSpec::Rails::Assertions
|
|
37
|
+
include ::RSpec::Rails::MinitestCounters
|
|
38
|
+
assertion_modules.each { |mod| include mod }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
super() do
|
|
42
|
+
define_method :build_assertion_instance do
|
|
43
|
+
assertion_class.new(self)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def assertion_instance
|
|
47
|
+
@assertion_instance ||= build_assertion_instance
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
assertion_modules.each do |mod|
|
|
51
|
+
mod.public_instance_methods.each do |method|
|
|
52
|
+
next if method == :method_missing || method == "method_missing"
|
|
53
|
+
|
|
54
|
+
define_method(method.to_sym) do |*args, &block|
|
|
55
|
+
assertion_instance.send(method.to_sym, *args, &block)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Adapts example groups for `Minitest::Test::LifecycleHooks`
|
|
64
|
+
#
|
|
65
|
+
# @private
|
|
66
|
+
module MinitestLifecycleAdapter
|
|
67
|
+
extend ActiveSupport::Concern
|
|
68
|
+
|
|
69
|
+
included do |group|
|
|
70
|
+
group.before { after_setup }
|
|
71
|
+
group.after { before_teardown }
|
|
72
|
+
|
|
73
|
+
group.around do |example|
|
|
74
|
+
before_setup
|
|
75
|
+
example.run
|
|
76
|
+
after_teardown
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def before_setup
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def after_setup
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def before_teardown
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def after_teardown
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# @private
|
|
94
|
+
module MinitestCounters
|
|
95
|
+
attr_writer :assertions
|
|
96
|
+
def assertions
|
|
97
|
+
@assertions ||= 0
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# @private
|
|
102
|
+
module SetupAndTeardownAdapter
|
|
103
|
+
extend ActiveSupport::Concern
|
|
104
|
+
|
|
105
|
+
module ClassMethods
|
|
106
|
+
# Wraps `setup` calls from within Rails' testing framework in `before`
|
|
107
|
+
# hooks.
|
|
108
|
+
def setup(*methods, &block)
|
|
109
|
+
methods.each do |method|
|
|
110
|
+
if method.to_s =~ /^setup_(with_controller|fixtures|controller_request_and_response)$/
|
|
111
|
+
prepend_before { __send__ method }
|
|
112
|
+
else
|
|
113
|
+
before { __send__ method }
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
before(&block) if block
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# @api private
|
|
120
|
+
#
|
|
121
|
+
# Wraps `teardown` calls from within Rails' testing framework in
|
|
122
|
+
# `after` hooks.
|
|
123
|
+
def teardown(*methods, &block)
|
|
124
|
+
methods.each { |method| after { __send__ method } }
|
|
125
|
+
after(&block) if block
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def initialize(*args)
|
|
130
|
+
super
|
|
131
|
+
@example = nil
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def method_name
|
|
135
|
+
@example
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# @private
|
|
140
|
+
module MinitestAssertionAdapter
|
|
141
|
+
extend ActiveSupport::Concern
|
|
142
|
+
|
|
143
|
+
# @private
|
|
144
|
+
module ClassMethods
|
|
145
|
+
# Returns the names of assertion methods that we want to expose to
|
|
146
|
+
# examples without exposing non-assertion methods in Test::Unit or
|
|
147
|
+
# Minitest.
|
|
148
|
+
def assertion_method_names
|
|
149
|
+
::RSpec::Rails::Assertions
|
|
150
|
+
.public_instance_methods
|
|
151
|
+
.select do |m|
|
|
152
|
+
m.to_s =~ /^(assert|flunk|refute)/
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def define_assertion_delegators
|
|
157
|
+
assertion_method_names.each do |m|
|
|
158
|
+
define_method(m.to_sym) do |*args, &block|
|
|
159
|
+
assertion_delegator.send(m.to_sym, *args, &block)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
class AssertionDelegator
|
|
166
|
+
include ::RSpec::Rails::Assertions
|
|
167
|
+
include ::RSpec::Rails::MinitestCounters
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def assertion_delegator
|
|
171
|
+
@assertion_delegator ||= AssertionDelegator.new
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
included do
|
|
175
|
+
define_assertion_delegators
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Backwards compatibility. It's unlikely that anyone is using this
|
|
180
|
+
# constant, but we had forgotten to mark it as `@private` earlier
|
|
181
|
+
#
|
|
182
|
+
# @private
|
|
183
|
+
TestUnitAssertionAdapter = MinitestAssertionAdapter
|
|
184
|
+
|
|
185
|
+
# @private
|
|
186
|
+
module TaggedLoggingAdapter
|
|
187
|
+
private
|
|
188
|
+
# Vendored from activesupport/lib/active_support/testing/tagged_logging.rb
|
|
189
|
+
# This implements the tagged_logger method where it is expected, but
|
|
190
|
+
# doesn't call `name` or set it up like Rails does.
|
|
191
|
+
def tagged_logger
|
|
192
|
+
@tagged_logger ||= (defined?(Rails.logger) && Rails.logger)
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# rubocop: disable Metrics/ModuleLength
|
|
2
|
+
module RSpec
|
|
3
|
+
module Rails
|
|
4
|
+
# Fake class to document RSpec Rails configuration options. In practice,
|
|
5
|
+
# these are dynamically added to the normal RSpec configuration object.
|
|
6
|
+
class Configuration
|
|
7
|
+
# @!method infer_spec_type_from_file_location!
|
|
8
|
+
# Automatically tag specs in conventional directories with matching `type`
|
|
9
|
+
# metadata so that they have relevant helpers available to them. See
|
|
10
|
+
# `RSpec::Rails::DIRECTORY_MAPPINGS` for details on which metadata is
|
|
11
|
+
# applied to each directory.
|
|
12
|
+
|
|
13
|
+
# @!method render_views=(val)
|
|
14
|
+
#
|
|
15
|
+
# When set to `true`, controller specs will render the relevant view as
|
|
16
|
+
# well. Defaults to `false`.
|
|
17
|
+
|
|
18
|
+
# @!method render_views(val)
|
|
19
|
+
# Enables view rendering for controllers specs.
|
|
20
|
+
|
|
21
|
+
# @!method render_views?
|
|
22
|
+
# Reader for currently value of `render_views` setting.
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Mappings used by `infer_spec_type_from_file_location!`.
|
|
26
|
+
#
|
|
27
|
+
# @api private
|
|
28
|
+
DIRECTORY_MAPPINGS = {
|
|
29
|
+
channel: %w[spec channels],
|
|
30
|
+
controller: %w[spec controllers],
|
|
31
|
+
generator: %w[spec generator],
|
|
32
|
+
helper: %w[spec helpers],
|
|
33
|
+
job: %w[spec jobs],
|
|
34
|
+
mailer: %w[spec mailers],
|
|
35
|
+
model: %w[spec models],
|
|
36
|
+
request: %w[spec (requests|integration|api)],
|
|
37
|
+
routing: %w[spec routing],
|
|
38
|
+
view: %w[spec views],
|
|
39
|
+
feature: %w[spec features],
|
|
40
|
+
system: %w[spec system],
|
|
41
|
+
mailbox: %w[spec mailboxes]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
# Sets up the different example group modules for the different spec types
|
|
45
|
+
#
|
|
46
|
+
# @api private
|
|
47
|
+
def self.add_test_type_configurations(config)
|
|
48
|
+
config.include RSpec::Rails::ControllerExampleGroup, type: :controller
|
|
49
|
+
config.include RSpec::Rails::HelperExampleGroup, type: :helper
|
|
50
|
+
config.include RSpec::Rails::ModelExampleGroup, type: :model
|
|
51
|
+
config.include RSpec::Rails::RequestExampleGroup, type: :request
|
|
52
|
+
config.include RSpec::Rails::RoutingExampleGroup, type: :routing
|
|
53
|
+
config.include RSpec::Rails::ViewExampleGroup, type: :view
|
|
54
|
+
config.include RSpec::Rails::FeatureExampleGroup, type: :feature
|
|
55
|
+
config.include RSpec::Rails::Matchers
|
|
56
|
+
config.include RSpec::Rails::SystemExampleGroup, type: :system
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# @private
|
|
60
|
+
def self.initialize_configuration(config) # rubocop:disable Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/AbcSize,Metrics/PerceivedComplexity
|
|
61
|
+
config.backtrace_exclusion_patterns << /vendor\//
|
|
62
|
+
config.backtrace_exclusion_patterns << %r{lib/rspec/rails}
|
|
63
|
+
|
|
64
|
+
# controller settings
|
|
65
|
+
config.add_setting :infer_base_class_for_anonymous_controllers, default: true
|
|
66
|
+
|
|
67
|
+
# fixture support
|
|
68
|
+
config.add_setting :use_active_record, default: true
|
|
69
|
+
config.add_setting :use_transactional_fixtures, alias_with: :use_transactional_examples
|
|
70
|
+
config.add_setting :use_instantiated_fixtures
|
|
71
|
+
config.add_setting :global_fixtures
|
|
72
|
+
|
|
73
|
+
if ::Rails::VERSION::STRING < "7.1.0"
|
|
74
|
+
config.add_setting :fixture_path
|
|
75
|
+
else
|
|
76
|
+
config.add_setting :fixture_paths
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
config.include RSpec::Rails::FixtureSupport, :use_fixtures
|
|
80
|
+
|
|
81
|
+
# We'll need to create a deprecated module in order to properly report to
|
|
82
|
+
# gems / projects which are relying on this being loaded globally.
|
|
83
|
+
#
|
|
84
|
+
# See rspec/rspec-rails#1355 for history
|
|
85
|
+
#
|
|
86
|
+
# @deprecated Include `RSpec::Rails::RailsExampleGroup` or
|
|
87
|
+
# `RSpec::Rails::FixtureSupport` directly instead
|
|
88
|
+
config.include RSpec::Rails::FixtureSupport
|
|
89
|
+
|
|
90
|
+
config.add_setting :file_fixture_path, default: 'spec/fixtures/files'
|
|
91
|
+
config.include RSpec::Rails::FileFixtureSupport
|
|
92
|
+
|
|
93
|
+
# Add support for fixture_path on fixture_file_upload
|
|
94
|
+
config.include RSpec::Rails::FixtureFileUploadSupport
|
|
95
|
+
|
|
96
|
+
# This allows us to expose `render_views` as a config option even though it
|
|
97
|
+
# breaks the convention of other options by using `render_views` as a
|
|
98
|
+
# command (i.e. `render_views = true`), where it would normally be used
|
|
99
|
+
# as a getter. This makes it easier for rspec-rails users because we use
|
|
100
|
+
# `render_views` directly in example groups, so this aligns the two APIs,
|
|
101
|
+
# but requires this workaround:
|
|
102
|
+
config.add_setting :rendering_views, default: false
|
|
103
|
+
|
|
104
|
+
config.instance_exec do
|
|
105
|
+
def render_views=(val)
|
|
106
|
+
self.rendering_views = val
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def render_views
|
|
110
|
+
self.rendering_views = true
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def render_views?
|
|
114
|
+
rendering_views?
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
undef :rendering_views? if respond_to?(:rendering_views?)
|
|
118
|
+
def rendering_views?
|
|
119
|
+
!!rendering_views
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Define boolean predicates rather than relying on rspec-core due
|
|
123
|
+
# to the bug fix in rspec/rspec-core#2736, note some of these
|
|
124
|
+
# predicates are a bit nonsensical, but they exist for backwards
|
|
125
|
+
# compatibility, we can tidy these up in `rspec-rails` 5.
|
|
126
|
+
undef :fixture_path? if respond_to?(:fixture_path?)
|
|
127
|
+
def fixture_path?
|
|
128
|
+
!!fixture_path
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
undef :global_fixtures? if respond_to?(:global_fixtures?)
|
|
132
|
+
def global_fixtures?
|
|
133
|
+
!!global_fixtures
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
undef :infer_base_class_for_anonymous_controllers? if respond_to?(:infer_base_class_for_anonymous_controllers?)
|
|
137
|
+
def infer_base_class_for_anonymous_controllers?
|
|
138
|
+
!!infer_base_class_for_anonymous_controllers
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
undef :use_instantiated_fixtures? if respond_to?(:use_instantiated_fixtures?)
|
|
142
|
+
def use_instantiated_fixtures?
|
|
143
|
+
!!use_instantiated_fixtures
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
undef :use_transactional_fixtures? if respond_to?(:use_transactional_fixtures?)
|
|
147
|
+
def use_transactional_fixtures?
|
|
148
|
+
!!use_transactional_fixtures
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def infer_spec_type_from_file_location!
|
|
152
|
+
DIRECTORY_MAPPINGS.each do |type, dir_parts|
|
|
153
|
+
escaped_path = Regexp.compile(dir_parts.join('[\\\/]') + '[\\\/]')
|
|
154
|
+
define_derived_metadata(file_path: escaped_path) do |metadata|
|
|
155
|
+
metadata[:type] ||= type
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Adds exclusion filters for gems included with Rails
|
|
161
|
+
def filter_rails_from_backtrace!
|
|
162
|
+
filter_gems_from_backtrace "actionmailer", "actionpack", "actionview"
|
|
163
|
+
filter_gems_from_backtrace "activemodel", "activerecord",
|
|
164
|
+
"activesupport", "activejob"
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# @deprecated TestFixtures#fixture_path is deprecated and will be removed in Rails 7.2
|
|
168
|
+
if ::Rails::VERSION::STRING >= "7.1.0"
|
|
169
|
+
def fixture_path
|
|
170
|
+
RSpec.deprecate(
|
|
171
|
+
"config.fixture_path",
|
|
172
|
+
replacement: "config.fixture_paths",
|
|
173
|
+
message: "Rails 7.1 has deprecated the singular fixture_path in favour of an array." \
|
|
174
|
+
"You should migrate to plural:"
|
|
175
|
+
)
|
|
176
|
+
fixture_paths&.first
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def fixture_path=(path)
|
|
180
|
+
RSpec.deprecate(
|
|
181
|
+
"config.fixture_path = #{path.inspect}",
|
|
182
|
+
replacement: "config.fixture_paths = [#{path.inspect}]",
|
|
183
|
+
message: "Rails 7.1 has deprecated the singular fixture_path in favour of an array." \
|
|
184
|
+
"You should migrate to plural:"
|
|
185
|
+
)
|
|
186
|
+
self.fixture_paths = Array(path)
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
add_test_type_configurations(config)
|
|
192
|
+
|
|
193
|
+
if defined?(::Rails::Controller::Testing)
|
|
194
|
+
[:controller, :view, :request].each do |type|
|
|
195
|
+
config.include ::Rails::Controller::Testing::TestProcess, type: type
|
|
196
|
+
config.include ::Rails::Controller::Testing::TemplateAssertions, type: type
|
|
197
|
+
config.include ::Rails::Controller::Testing::Integration, type: type
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
if RSpec::Rails::FeatureCheck.has_action_mailer?
|
|
202
|
+
config.include RSpec::Rails::MailerExampleGroup, type: :mailer
|
|
203
|
+
config.after { ActionMailer::Base.deliveries.clear }
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
if RSpec::Rails::FeatureCheck.has_active_job?
|
|
207
|
+
config.include RSpec::Rails::JobExampleGroup, type: :job
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
if RSpec::Rails::FeatureCheck.has_action_cable_testing?
|
|
211
|
+
config.include RSpec::Rails::ChannelExampleGroup, type: :channel
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
if RSpec::Rails::FeatureCheck.has_action_mailbox?
|
|
215
|
+
config.include RSpec::Rails::MailboxExampleGroup, type: :mailbox
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
initialize_configuration RSpec.configuration
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
# rubocop: enable Metrics/ModuleLength
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require "rspec/rails/matchers/action_cable/have_streams"
|
|
2
|
+
|
|
3
|
+
module RSpec
|
|
4
|
+
module Rails
|
|
5
|
+
# @api public
|
|
6
|
+
# Container module for channel spec functionality. It is only available if
|
|
7
|
+
# ActionCable has been loaded before it.
|
|
8
|
+
module ChannelExampleGroup
|
|
9
|
+
# @private
|
|
10
|
+
module ClassMethods
|
|
11
|
+
# These blank modules are only necessary for YARD processing. It doesn't
|
|
12
|
+
# handle the conditional check below very well and reports undocumented objects.
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
if RSpec::Rails::FeatureCheck.has_action_cable_testing?
|
|
19
|
+
module RSpec
|
|
20
|
+
module Rails
|
|
21
|
+
# @api public
|
|
22
|
+
# Container module for channel spec functionality.
|
|
23
|
+
module ChannelExampleGroup
|
|
24
|
+
extend ActiveSupport::Concern
|
|
25
|
+
include RSpec::Rails::RailsExampleGroup
|
|
26
|
+
include ActionCable::Connection::TestCase::Behavior
|
|
27
|
+
include ActionCable::Channel::TestCase::Behavior
|
|
28
|
+
|
|
29
|
+
# Class-level DSL for channel specs.
|
|
30
|
+
module ClassMethods
|
|
31
|
+
# @private
|
|
32
|
+
def channel_class
|
|
33
|
+
(_channel_class || described_class).tap do |klass|
|
|
34
|
+
next if klass <= ::ActionCable::Channel::Base
|
|
35
|
+
|
|
36
|
+
raise "Described class is not a channel class.\n" \
|
|
37
|
+
"Specify the channel class in the `describe` statement " \
|
|
38
|
+
"or set it manually using `tests MyChannelClass`"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# @private
|
|
43
|
+
def connection_class
|
|
44
|
+
(_connection_class || described_class).tap do |klass|
|
|
45
|
+
next if klass <= ::ActionCable::Connection::Base
|
|
46
|
+
|
|
47
|
+
raise "Described class is not a connection class.\n" \
|
|
48
|
+
"Specify the connection class in the `describe` statement " \
|
|
49
|
+
"or set it manually using `tests MyConnectionClass`"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Checks that the connection attempt has been rejected.
|
|
55
|
+
#
|
|
56
|
+
# @example
|
|
57
|
+
# expect { connect }.to have_rejected_connection
|
|
58
|
+
def have_rejected_connection
|
|
59
|
+
raise_error(::ActionCable::Connection::Authorization::UnauthorizedError)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Checks that the subscription is subscribed to at least one stream.
|
|
63
|
+
#
|
|
64
|
+
# @example
|
|
65
|
+
# expect(subscription).to have_streams
|
|
66
|
+
def have_streams
|
|
67
|
+
check_subscribed!
|
|
68
|
+
|
|
69
|
+
RSpec::Rails::Matchers::ActionCable::HaveStream.new
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Checks that the channel has been subscribed to the given stream
|
|
73
|
+
#
|
|
74
|
+
# @example
|
|
75
|
+
# expect(subscription).to have_stream_from("chat_1")
|
|
76
|
+
def have_stream_from(stream)
|
|
77
|
+
check_subscribed!
|
|
78
|
+
|
|
79
|
+
RSpec::Rails::Matchers::ActionCable::HaveStream.new(stream)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Checks that the channel has been subscribed to a stream for the given model
|
|
83
|
+
#
|
|
84
|
+
# @example
|
|
85
|
+
# expect(subscription).to have_stream_for(user)
|
|
86
|
+
def have_stream_for(object)
|
|
87
|
+
check_subscribed!
|
|
88
|
+
RSpec::Rails::Matchers::ActionCable::HaveStream.new(broadcasting_for(object))
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|