rubocop-rspec 2.29.2 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +28 -0
- data/README.md +1 -1
- data/config/default.yml +62 -264
- data/config/obsoletion.yml +11 -0
- data/lib/rubocop/cop/rspec/base.rb +0 -1
- data/lib/rubocop/cop/rspec/dialect.rb +13 -0
- data/lib/rubocop/cop/rspec/expect_actual.rb +1 -1
- data/lib/rubocop/cop/rspec/expect_in_hook.rb +1 -1
- data/lib/rubocop/cop/rspec/expect_in_let.rb +42 -0
- data/lib/rubocop/cop/rspec/leaky_constant_declaration.rb +1 -1
- data/lib/rubocop/cop/rspec/missing_expectation_target_method.rb +54 -0
- data/lib/rubocop/cop/rspec/multiple_describes.rb +1 -1
- data/lib/rubocop/cop/rspec/multiple_expectations.rb +2 -2
- data/lib/rubocop/cop/rspec/multiple_memoized_helpers.rb +2 -4
- data/lib/rubocop/cop/rspec/named_subject.rb +5 -2
- data/lib/rubocop/cop/rspec/predicate_matcher.rb +1 -1
- data/lib/rubocop/cop/rspec/remove_const.rb +0 -1
- data/lib/rubocop/cop/rspec/scattered_setup.rb +1 -1
- data/lib/rubocop/cop/rspec/sort_metadata.rb +1 -1
- data/lib/rubocop/cop/rspec/stubbed_mock.rb +3 -1
- data/lib/rubocop/cop/rspec/subject_stub.rb +2 -2
- data/lib/rubocop/cop/rspec_cops.rb +2 -25
- data/lib/rubocop/rspec/concept.rb +0 -1
- data/lib/rubocop/rspec/config_formatter.rb +1 -24
- data/lib/rubocop/rspec/cop/generator.rb +25 -0
- data/lib/rubocop/rspec/language.rb +0 -1
- data/lib/rubocop/rspec/shared_contexts/default_rspec_language_config_context.rb +1 -1
- data/lib/rubocop/rspec/version.rb +1 -1
- data/lib/rubocop-rspec.rb +1 -17
- metadata +7 -69
- data/lib/rubocop/cop/rspec/capybara/current_path_expectation.rb +0 -39
- data/lib/rubocop/cop/rspec/capybara/feature_methods.rb +0 -104
- data/lib/rubocop/cop/rspec/capybara/match_style.rb +0 -38
- data/lib/rubocop/cop/rspec/capybara/negation_matcher.rb +0 -33
- data/lib/rubocop/cop/rspec/capybara/specific_actions.rb +0 -29
- data/lib/rubocop/cop/rspec/capybara/specific_finders.rb +0 -24
- data/lib/rubocop/cop/rspec/capybara/specific_matcher.rb +0 -35
- data/lib/rubocop/cop/rspec/capybara/visibility_matcher.rb +0 -36
- data/lib/rubocop/cop/rspec/factory_bot/attribute_defined_statically.rb +0 -35
- data/lib/rubocop/cop/rspec/factory_bot/consistent_parentheses_style.rb +0 -50
- data/lib/rubocop/cop/rspec/factory_bot/create_list.rb +0 -40
- data/lib/rubocop/cop/rspec/factory_bot/factory_class_name.rb +0 -29
- data/lib/rubocop/cop/rspec/factory_bot/factory_name_style.rb +0 -33
- data/lib/rubocop/cop/rspec/factory_bot/syntax_methods.rb +0 -55
- data/lib/rubocop/cop/rspec/file_path.rb +0 -179
- data/lib/rubocop/cop/rspec/rails/avoid_setup_hook.rb +0 -27
- data/lib/rubocop/cop/rspec/rails/have_http_status.rb +0 -35
- data/lib/rubocop/cop/rspec/rails/http_status.rb +0 -61
- data/lib/rubocop/cop/rspec/rails/inferred_spec_type.rb +0 -62
- data/lib/rubocop/cop/rspec/rails/minitest_assertions.rb +0 -39
- data/lib/rubocop/cop/rspec/rails/negation_be_valid.rb +0 -39
- data/lib/rubocop/cop/rspec/rails/travel_around.rb +0 -34
- data/lib/rubocop/rspec/language/node_pattern.rb +0 -48
@@ -1,179 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
# Checks that spec file paths are consistent and well-formed.
|
7
|
-
#
|
8
|
-
# This cop is deprecated.
|
9
|
-
# We plan to remove it in the next major version update to 3.0.
|
10
|
-
# The migration targets are `RSpec/SpecFilePathSuffix`
|
11
|
-
# and `RSpec/SpecFilePathFormat`.
|
12
|
-
# If you are using this cop, please plan for migration.
|
13
|
-
#
|
14
|
-
# By default, this checks that spec file paths are consistent with the
|
15
|
-
# test subject and enforces that it reflects the described
|
16
|
-
# class/module and its optionally called out method.
|
17
|
-
#
|
18
|
-
# With the configuration option `IgnoreMethods` the called out method will
|
19
|
-
# be ignored when determining the enforced path.
|
20
|
-
#
|
21
|
-
# With the configuration option `CustomTransform` modules or classes can
|
22
|
-
# be specified that should not as usual be transformed from CamelCase to
|
23
|
-
# snake_case (e.g. 'RuboCop' => 'rubocop' ).
|
24
|
-
#
|
25
|
-
# With the configuration option `SpecSuffixOnly` test files will only
|
26
|
-
# be checked to ensure they end in '_spec.rb'. This option disables
|
27
|
-
# checking for consistency in the test subject or test methods.
|
28
|
-
#
|
29
|
-
# @example
|
30
|
-
# # bad
|
31
|
-
# whatever_spec.rb # describe MyClass
|
32
|
-
#
|
33
|
-
# # bad
|
34
|
-
# my_class_spec.rb # describe MyClass, '#method'
|
35
|
-
#
|
36
|
-
# # good
|
37
|
-
# my_class_spec.rb # describe MyClass
|
38
|
-
#
|
39
|
-
# # good
|
40
|
-
# my_class_method_spec.rb # describe MyClass, '#method'
|
41
|
-
#
|
42
|
-
# # good
|
43
|
-
# my_class/method_spec.rb # describe MyClass, '#method'
|
44
|
-
#
|
45
|
-
# @example when configuration is `IgnoreMethods: true`
|
46
|
-
# # bad
|
47
|
-
# whatever_spec.rb # describe MyClass
|
48
|
-
#
|
49
|
-
# # good
|
50
|
-
# my_class_spec.rb # describe MyClass
|
51
|
-
#
|
52
|
-
# # good
|
53
|
-
# my_class_spec.rb # describe MyClass, '#method'
|
54
|
-
#
|
55
|
-
# @example when configuration is `SpecSuffixOnly: true`
|
56
|
-
# # good
|
57
|
-
# whatever_spec.rb # describe MyClass
|
58
|
-
#
|
59
|
-
# # good
|
60
|
-
# my_class_spec.rb # describe MyClass
|
61
|
-
#
|
62
|
-
# # good
|
63
|
-
# my_class_spec.rb # describe MyClass, '#method'
|
64
|
-
#
|
65
|
-
class FilePath < Base
|
66
|
-
include TopLevelGroup
|
67
|
-
include Namespace
|
68
|
-
|
69
|
-
MSG = 'Spec path should end with `%<suffix>s`.'
|
70
|
-
|
71
|
-
# @!method example_group(node)
|
72
|
-
def_node_matcher :example_group, <<~PATTERN
|
73
|
-
(block
|
74
|
-
$(send #rspec? _example_group $_ $...) ...
|
75
|
-
)
|
76
|
-
PATTERN
|
77
|
-
|
78
|
-
# @!method routing_metadata?(node)
|
79
|
-
def_node_search :routing_metadata?, '(pair (sym :type) (sym :routing))'
|
80
|
-
|
81
|
-
def on_top_level_example_group(node)
|
82
|
-
return unless top_level_groups.one?
|
83
|
-
|
84
|
-
example_group(node) do |send_node, example_group, arguments|
|
85
|
-
ensure_correct_file_path(send_node, example_group, arguments)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
private
|
90
|
-
|
91
|
-
def ensure_correct_file_path(send_node, example_group, arguments)
|
92
|
-
pattern = pattern_for(example_group, arguments)
|
93
|
-
return if filename_ends_with?(pattern)
|
94
|
-
|
95
|
-
# For the suffix shown in the offense message, modify the regular
|
96
|
-
# expression pattern to resemble a glob pattern for clearer error
|
97
|
-
# messages.
|
98
|
-
offense_suffix = pattern.gsub('.*', '*').sub('[^/]', '')
|
99
|
-
.sub('\.', '.')
|
100
|
-
add_offense(send_node, message: format(MSG, suffix: offense_suffix))
|
101
|
-
end
|
102
|
-
|
103
|
-
def routing_spec?(args)
|
104
|
-
args.any?(&method(:routing_metadata?)) || routing_spec_path?
|
105
|
-
end
|
106
|
-
|
107
|
-
def pattern_for(example_group, arguments)
|
108
|
-
method_name = arguments.first
|
109
|
-
if spec_suffix_only? || !example_group.const_type? ||
|
110
|
-
routing_spec?(arguments)
|
111
|
-
return pattern_for_spec_suffix_only
|
112
|
-
end
|
113
|
-
|
114
|
-
[
|
115
|
-
expected_path(example_group),
|
116
|
-
name_pattern(method_name),
|
117
|
-
'[^/]*_spec\.rb'
|
118
|
-
].join
|
119
|
-
end
|
120
|
-
|
121
|
-
def pattern_for_spec_suffix_only
|
122
|
-
'.*_spec\.rb'
|
123
|
-
end
|
124
|
-
|
125
|
-
def name_pattern(method_name)
|
126
|
-
return unless method_name&.str_type?
|
127
|
-
return if ignore_methods?
|
128
|
-
|
129
|
-
".*#{method_name.str_content.gsub(/\s/, '_').gsub(/\W/, '')}"
|
130
|
-
end
|
131
|
-
|
132
|
-
def expected_path(constant)
|
133
|
-
constants = namespace(constant) + constant.const_name.split('::')
|
134
|
-
|
135
|
-
File.join(
|
136
|
-
constants.map do |name|
|
137
|
-
custom_transform.fetch(name) { camel_to_snake_case(name) }
|
138
|
-
end
|
139
|
-
)
|
140
|
-
end
|
141
|
-
|
142
|
-
def camel_to_snake_case(string)
|
143
|
-
string
|
144
|
-
.gsub(/([^A-Z])([A-Z]+)/, '\1_\2')
|
145
|
-
.gsub(/([A-Z])([A-Z][^A-Z\d]+)/, '\1_\2')
|
146
|
-
.downcase
|
147
|
-
end
|
148
|
-
|
149
|
-
def custom_transform
|
150
|
-
cop_config.fetch('CustomTransform', {})
|
151
|
-
end
|
152
|
-
|
153
|
-
def ignore_methods?
|
154
|
-
cop_config['IgnoreMethods']
|
155
|
-
end
|
156
|
-
|
157
|
-
def filename_ends_with?(pattern)
|
158
|
-
expanded_file_path.match?("#{pattern}$")
|
159
|
-
end
|
160
|
-
|
161
|
-
def relevant_rubocop_rspec_file?(_file)
|
162
|
-
true
|
163
|
-
end
|
164
|
-
|
165
|
-
def spec_suffix_only?
|
166
|
-
cop_config['SpecSuffixOnly']
|
167
|
-
end
|
168
|
-
|
169
|
-
def routing_spec_path?
|
170
|
-
expanded_file_path.include?('spec/routing/')
|
171
|
-
end
|
172
|
-
|
173
|
-
def expanded_file_path
|
174
|
-
File.expand_path(processed_source.file_path)
|
175
|
-
end
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Rails
|
7
|
-
# @!parse
|
8
|
-
# # Checks that tests use RSpec `before` hook over Rails `setup`
|
9
|
-
# # method.
|
10
|
-
# #
|
11
|
-
# # @example
|
12
|
-
# # # bad
|
13
|
-
# # setup do
|
14
|
-
# # allow(foo).to receive(:bar)
|
15
|
-
# # end
|
16
|
-
# #
|
17
|
-
# # # good
|
18
|
-
# # before do
|
19
|
-
# # allow(foo).to receive(:bar)
|
20
|
-
# # end
|
21
|
-
# #
|
22
|
-
# class AvoidSetupHook < RuboCop::Cop::RSpec::Base; end
|
23
|
-
AvoidSetupHook = ::RuboCop::Cop::RSpecRails::AvoidSetupHook
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Rails
|
7
|
-
# @!parse
|
8
|
-
# # Checks that tests use `have_http_status` instead of equality matchers.
|
9
|
-
# #
|
10
|
-
# # @example ResponseMethods: ['response', 'last_response'] (default)
|
11
|
-
# # # bad
|
12
|
-
# # expect(response.status).to be(200)
|
13
|
-
# # expect(last_response.code).to eq("200")
|
14
|
-
# #
|
15
|
-
# # # good
|
16
|
-
# # expect(response).to have_http_status(200)
|
17
|
-
# # expect(last_response).to have_http_status(200)
|
18
|
-
# #
|
19
|
-
# # @example ResponseMethods: ['foo_response']
|
20
|
-
# # # bad
|
21
|
-
# # expect(foo_response.status).to be(200)
|
22
|
-
# #
|
23
|
-
# # # good
|
24
|
-
# # expect(foo_response).to have_http_status(200)
|
25
|
-
# #
|
26
|
-
# # # also good
|
27
|
-
# # expect(response).to have_http_status(200)
|
28
|
-
# # expect(last_response).to have_http_status(200)
|
29
|
-
# #
|
30
|
-
# class HaveHttpStatus < ::RuboCop::Cop::Base; end
|
31
|
-
HaveHttpStatus = ::RuboCop::Cop::RSpecRails::HaveHttpStatus
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Rails
|
7
|
-
# @!parse
|
8
|
-
# # Enforces use of symbolic or numeric value to describe HTTP status.
|
9
|
-
# #
|
10
|
-
# # This cop inspects only `have_http_status` calls.
|
11
|
-
# # So, this cop does not check if a method starting with `be_*` is
|
12
|
-
# # used when setting for `EnforcedStyle: symbolic` or
|
13
|
-
# # `EnforcedStyle: numeric`.
|
14
|
-
# #
|
15
|
-
# # @example `EnforcedStyle: symbolic` (default)
|
16
|
-
# # # bad
|
17
|
-
# # it { is_expected.to have_http_status 200 }
|
18
|
-
# # it { is_expected.to have_http_status 404 }
|
19
|
-
# # it { is_expected.to have_http_status "403" }
|
20
|
-
# #
|
21
|
-
# # # good
|
22
|
-
# # it { is_expected.to have_http_status :ok }
|
23
|
-
# # it { is_expected.to have_http_status :not_found }
|
24
|
-
# # it { is_expected.to have_http_status :forbidden }
|
25
|
-
# # it { is_expected.to have_http_status :success }
|
26
|
-
# # it { is_expected.to have_http_status :error }
|
27
|
-
# #
|
28
|
-
# # @example `EnforcedStyle: numeric`
|
29
|
-
# # # bad
|
30
|
-
# # it { is_expected.to have_http_status :ok }
|
31
|
-
# # it { is_expected.to have_http_status :not_found }
|
32
|
-
# # it { is_expected.to have_http_status "forbidden" }
|
33
|
-
# #
|
34
|
-
# # # good
|
35
|
-
# # it { is_expected.to have_http_status 200 }
|
36
|
-
# # it { is_expected.to have_http_status 404 }
|
37
|
-
# # it { is_expected.to have_http_status 403 }
|
38
|
-
# # it { is_expected.to have_http_status :success }
|
39
|
-
# # it { is_expected.to have_http_status :error }
|
40
|
-
# #
|
41
|
-
# # @example `EnforcedStyle: be_status`
|
42
|
-
# # # bad
|
43
|
-
# # it { is_expected.to have_http_status :ok }
|
44
|
-
# # it { is_expected.to have_http_status :not_found }
|
45
|
-
# # it { is_expected.to have_http_status "forbidden" }
|
46
|
-
# # it { is_expected.to have_http_status 200 }
|
47
|
-
# # it { is_expected.to have_http_status 404 }
|
48
|
-
# # it { is_expected.to have_http_status "403" }
|
49
|
-
# #
|
50
|
-
# # # good
|
51
|
-
# # it { is_expected.to be_ok }
|
52
|
-
# # it { is_expected.to be_not_found }
|
53
|
-
# # it { is_expected.to have_http_status :success }
|
54
|
-
# # it { is_expected.to have_http_status :error }
|
55
|
-
# #
|
56
|
-
# class HttpStatus < RuboCop::Cop::RSpec::Base; end
|
57
|
-
HttpStatus = ::RuboCop::Cop::RSpecRails::HttpStatus
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Rails
|
7
|
-
# @!parse
|
8
|
-
# # Identifies redundant spec type.
|
9
|
-
# #
|
10
|
-
# # After setting up rspec-rails, you will have enabled
|
11
|
-
# # `config.infer_spec_type_from_file_location!` by default in
|
12
|
-
# # spec/rails_helper.rb. This cop works in conjunction with
|
13
|
-
# # this config.
|
14
|
-
# # If you disable this config, disable this cop as well.
|
15
|
-
# #
|
16
|
-
# # @safety
|
17
|
-
# # This cop is marked as unsafe because
|
18
|
-
# # `config.infer_spec_type_from_file_location!` may not be enabled.
|
19
|
-
# #
|
20
|
-
# # @example
|
21
|
-
# # # bad
|
22
|
-
# # # spec/models/user_spec.rb
|
23
|
-
# # RSpec.describe User, type: :model do
|
24
|
-
# # end
|
25
|
-
# #
|
26
|
-
# # # good
|
27
|
-
# # # spec/models/user_spec.rb
|
28
|
-
# # RSpec.describe User do
|
29
|
-
# # end
|
30
|
-
# #
|
31
|
-
# # # good
|
32
|
-
# # # spec/models/user_spec.rb
|
33
|
-
# # RSpec.describe User, type: :common do
|
34
|
-
# # end
|
35
|
-
# #
|
36
|
-
# # @example `Inferences` configuration
|
37
|
-
# # # .rubocop.yml
|
38
|
-
# # # RSpec/Rails/InferredSpecType:
|
39
|
-
# # # Inferences:
|
40
|
-
# # # services: service
|
41
|
-
# #
|
42
|
-
# # # bad
|
43
|
-
# # # spec/services/user_spec.rb
|
44
|
-
# # RSpec.describe User, type: :service do
|
45
|
-
# # end
|
46
|
-
# #
|
47
|
-
# # # good
|
48
|
-
# # # spec/services/user_spec.rb
|
49
|
-
# # RSpec.describe User do
|
50
|
-
# # end
|
51
|
-
# #
|
52
|
-
# # # good
|
53
|
-
# # # spec/services/user_spec.rb
|
54
|
-
# # RSpec.describe User, type: :common do
|
55
|
-
# # end
|
56
|
-
# #
|
57
|
-
# class InferredSpecType < RuboCop::Cop::RSpec::Base; end
|
58
|
-
InferredSpecType = ::RuboCop::Cop::RSpecRails::InferredSpecType
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Rails
|
7
|
-
# @!parse
|
8
|
-
# # Check if using Minitest-like matchers.
|
9
|
-
# #
|
10
|
-
# # Check the use of minitest-like matchers
|
11
|
-
# # starting with `assert_` or `refute_`.
|
12
|
-
# #
|
13
|
-
# # @example
|
14
|
-
# # # bad
|
15
|
-
# # assert_equal(a, b)
|
16
|
-
# # assert_equal a, b, "must be equal"
|
17
|
-
# # assert_not_includes a, b
|
18
|
-
# # refute_equal(a, b)
|
19
|
-
# # assert_nil a
|
20
|
-
# # refute_empty(b)
|
21
|
-
# # assert_true(a)
|
22
|
-
# # assert_false(a)
|
23
|
-
# #
|
24
|
-
# # # good
|
25
|
-
# # expect(b).to eq(a)
|
26
|
-
# # expect(b).to(eq(a), "must be equal")
|
27
|
-
# # expect(a).not_to include(b)
|
28
|
-
# # expect(b).not_to eq(a)
|
29
|
-
# # expect(a).to eq(nil)
|
30
|
-
# # expect(a).not_to be_empty
|
31
|
-
# # expect(a).to be(true)
|
32
|
-
# # expect(a).to be(false)
|
33
|
-
# #
|
34
|
-
# class MinitestAssertions < RuboCop::Cop::RSpec::Base; end
|
35
|
-
MinitestAssertions = ::RuboCop::Cop::RSpecRails::MinitestAssertions
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Rails
|
7
|
-
# @!parse
|
8
|
-
# # Enforces use of `be_invalid` or `not_to` for negated be_valid.
|
9
|
-
# #
|
10
|
-
# # @safety
|
11
|
-
# # This cop is unsafe because it cannot guarantee that
|
12
|
-
# # the test target is an instance of `ActiveModel::Validations``.
|
13
|
-
# #
|
14
|
-
# # @example EnforcedStyle: not_to (default)
|
15
|
-
# # # bad
|
16
|
-
# # expect(foo).to be_invalid
|
17
|
-
# #
|
18
|
-
# # # good
|
19
|
-
# # expect(foo).not_to be_valid
|
20
|
-
# #
|
21
|
-
# # # good (with method chain)
|
22
|
-
# # expect(foo).to be_invalid.and be_odd
|
23
|
-
# #
|
24
|
-
# # @example EnforcedStyle: be_invalid
|
25
|
-
# # # bad
|
26
|
-
# # expect(foo).not_to be_valid
|
27
|
-
# #
|
28
|
-
# # # good
|
29
|
-
# # expect(foo).to be_invalid
|
30
|
-
# #
|
31
|
-
# # # good (with method chain)
|
32
|
-
# # expect(foo).to be_invalid.or be_even
|
33
|
-
# #
|
34
|
-
# class NegationBeValid < RuboCop::Cop::RSpec::Base; end
|
35
|
-
NegationBeValid = ::RuboCop::Cop::RSpecRails::NegationBeValid
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Rails
|
7
|
-
# @!parse
|
8
|
-
# # Prefer to travel in `before` rather than `around`.
|
9
|
-
# #
|
10
|
-
# # @safety
|
11
|
-
# # This cop is unsafe because the automatic `travel_back` is only
|
12
|
-
# # run on test cases that are considered as Rails related.
|
13
|
-
# #
|
14
|
-
# # And also, this cop's autocorrection is unsafe because the order
|
15
|
-
# # of execution will change if other steps exist before traveling
|
16
|
-
# # in `around`.
|
17
|
-
# #
|
18
|
-
# # @example
|
19
|
-
# # # bad
|
20
|
-
# # around do |example|
|
21
|
-
# # freeze_time do
|
22
|
-
# # example.run
|
23
|
-
# # end
|
24
|
-
# # end
|
25
|
-
# #
|
26
|
-
# # # good
|
27
|
-
# # before { freeze_time }
|
28
|
-
# #
|
29
|
-
# class TravelAround < RuboCop::Cop::RSpec::Base; end
|
30
|
-
TravelAround = ::RuboCop::Cop::RSpecRails::TravelAround
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module RSpec
|
5
|
-
module Language
|
6
|
-
# Helper methods to detect RSpec DSL used with send and block
|
7
|
-
# @deprecated Prefer using Node Pattern directly
|
8
|
-
# Use `'(block (send nil? #Example.all ...) ...)'` instead of
|
9
|
-
# `block_pattern('#Example.all')`
|
10
|
-
module NodePattern
|
11
|
-
# @deprecated Prefer using Node Pattern directly
|
12
|
-
def send_pattern(string)
|
13
|
-
deprecation_warning __method__
|
14
|
-
"(send #rspec? #{string} ...)"
|
15
|
-
end
|
16
|
-
|
17
|
-
# @deprecated Prefer using Node Pattern directly
|
18
|
-
def block_pattern(string)
|
19
|
-
deprecation_warning __method__
|
20
|
-
"(block #{send_pattern(string)} ...)"
|
21
|
-
end
|
22
|
-
|
23
|
-
# @deprecated Prefer using Node Pattern directly
|
24
|
-
def numblock_pattern(string)
|
25
|
-
deprecation_warning __method__
|
26
|
-
"(numblock #{send_pattern(string)} ...)"
|
27
|
-
end
|
28
|
-
|
29
|
-
# @deprecated Prefer using Node Pattern directly
|
30
|
-
def block_or_numblock_pattern(string)
|
31
|
-
deprecation_warning __method__
|
32
|
-
"{#{block_pattern(string)} #{numblock_pattern(string)}}"
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def deprecation_warning(method)
|
38
|
-
# Only warn in derived extensions' specs
|
39
|
-
return unless defined?(::RSpec)
|
40
|
-
|
41
|
-
Kernel.warn <<~MESSAGE, uplevel: 2
|
42
|
-
Usage of #{method} is deprecated. Use node pattern explicitly.
|
43
|
-
MESSAGE
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|