rubocop-rspec 2.31.0 → 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 +19 -0
- data/README.md +1 -1
- data/config/default.yml +39 -261
- 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 +1 -3
- 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 +1 -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 +6 -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
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module RSpec
|
6
|
+
# Checks if `.to`, `not_to` or `to_not` are used.
|
7
|
+
#
|
8
|
+
# The RSpec::Expectations::ExpectationTarget must use `to`, `not_to` or
|
9
|
+
# `to_not` to run. Therefore, this cop checks if other methods are used.
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# # bad
|
13
|
+
# expect(something).kind_of? Foo
|
14
|
+
# is_expected == 42
|
15
|
+
# expect{something}.eq? BarError
|
16
|
+
#
|
17
|
+
# # good
|
18
|
+
# expect(something).to be_a Foo
|
19
|
+
# is_expected.to eq 42
|
20
|
+
# expect{something}.to raise_error BarError
|
21
|
+
#
|
22
|
+
class MissingExpectationTargetMethod < Base
|
23
|
+
MSG = 'Use `.to`, `.not_to` or `.to_not` to set an expectation.'
|
24
|
+
RESTRICT_ON_SEND = %i[expect is_expected].freeze
|
25
|
+
|
26
|
+
# @!method expect?(node)
|
27
|
+
def_node_matcher :expect?, <<~PATTERN
|
28
|
+
{
|
29
|
+
(send nil? :expect ...)
|
30
|
+
(send nil? :is_expected)
|
31
|
+
}
|
32
|
+
PATTERN
|
33
|
+
|
34
|
+
# @!method expect_block?(node)
|
35
|
+
def_node_matcher :expect_block?, <<~PATTERN
|
36
|
+
(block #expect? (args) _body)
|
37
|
+
PATTERN
|
38
|
+
|
39
|
+
# @!method expectation_without_runner?(node)
|
40
|
+
def_node_matcher :expectation_without_runner?, <<~PATTERN
|
41
|
+
(send {#expect? #expect_block?} !#Runners.all ...)
|
42
|
+
PATTERN
|
43
|
+
|
44
|
+
def on_send(node)
|
45
|
+
node = node.parent if node.parent&.block_type?
|
46
|
+
|
47
|
+
expectation_without_runner?(node.parent) do
|
48
|
+
add_offense(node.parent.loc.selector)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -30,7 +30,7 @@ module RuboCop
|
|
30
30
|
|
31
31
|
def on_top_level_group(node)
|
32
32
|
top_level_example_groups =
|
33
|
-
top_level_groups.select
|
33
|
+
top_level_groups.select { |group| example_group?(group) }
|
34
34
|
|
35
35
|
return if top_level_example_groups.one?
|
36
36
|
return unless top_level_example_groups.first.equal?(node)
|
@@ -72,7 +72,7 @@ module RuboCop
|
|
72
72
|
MSG = 'Example has too many expectations [%<total>d/%<max>d].'
|
73
73
|
|
74
74
|
ANYTHING = ->(_node) { true }
|
75
|
-
|
75
|
+
TRUE_NODE = lambda(&:true_type?)
|
76
76
|
|
77
77
|
# @!method aggregate_failures?(node)
|
78
78
|
def_node_matcher :aggregate_failures?, <<~PATTERN
|
@@ -110,7 +110,7 @@ module RuboCop
|
|
110
110
|
node_with_aggregate_failures = find_aggregate_failures(example_node)
|
111
111
|
return false unless node_with_aggregate_failures
|
112
112
|
|
113
|
-
aggregate_failures?(node_with_aggregate_failures,
|
113
|
+
aggregate_failures?(node_with_aggregate_failures, TRUE_NODE)
|
114
114
|
end
|
115
115
|
|
116
116
|
def find_aggregate_failures(example_node)
|
@@ -108,10 +108,8 @@ module RuboCop
|
|
108
108
|
attr_reader :example_group_memoized_helpers
|
109
109
|
|
110
110
|
def all_helpers(node)
|
111
|
-
|
112
|
-
|
113
|
-
*node.each_ancestor(:block).flat_map(&method(:helpers))
|
114
|
-
]
|
111
|
+
helpers(node) +
|
112
|
+
node.each_ancestor(:block).flat_map { |ancestor| helpers(ancestor) }
|
115
113
|
end
|
116
114
|
|
117
115
|
def helpers(node)
|
@@ -107,8 +107,11 @@ module RuboCop
|
|
107
107
|
private
|
108
108
|
|
109
109
|
def ignored_shared_example?(node)
|
110
|
-
cop_config['IgnoreSharedExamples']
|
111
|
-
|
110
|
+
return false unless cop_config['IgnoreSharedExamples']
|
111
|
+
|
112
|
+
node.each_ancestor(:block).any? do |ancestor|
|
113
|
+
shared_example?(ancestor)
|
114
|
+
end
|
112
115
|
end
|
113
116
|
|
114
117
|
def check_explicit_subject(node)
|
@@ -76,7 +76,7 @@ module RuboCop
|
|
76
76
|
return if first_occurrence == occurrence || !first_occurrence.body
|
77
77
|
|
78
78
|
corrector.insert_after(first_occurrence.body,
|
79
|
-
"\n#{occurrence.body
|
79
|
+
"\n#{occurrence.body&.source}")
|
80
80
|
corrector.remove(range_by_whole_lines(occurrence.source_range,
|
81
81
|
include_final_newline: true))
|
82
82
|
end
|
@@ -136,7 +136,9 @@ module RuboCop
|
|
136
136
|
RESTRICT_ON_SEND = %i[to].freeze
|
137
137
|
|
138
138
|
def on_send(node)
|
139
|
-
expectation(node,
|
139
|
+
expectation(node) do |expectation, method_name, matcher|
|
140
|
+
on_expectation(expectation, method_name, matcher)
|
141
|
+
end
|
140
142
|
end
|
141
143
|
|
142
144
|
private
|
@@ -113,8 +113,8 @@ module RuboCop
|
|
113
113
|
PATTERN
|
114
114
|
|
115
115
|
def on_top_level_group(node)
|
116
|
-
@explicit_subjects = find_all_explicit(node
|
117
|
-
@subject_overrides = find_all_explicit(node
|
116
|
+
@explicit_subjects = find_all_explicit(node) { |n| subject?(n) }
|
117
|
+
@subject_overrides = find_all_explicit(node) { |n| let?(n) }
|
118
118
|
|
119
119
|
find_subject_expectations(node) do |stub|
|
120
120
|
add_offense(stub)
|
@@ -1,29 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'rspec/capybara/current_path_expectation'
|
4
|
-
require_relative 'rspec/capybara/feature_methods'
|
5
|
-
require_relative 'rspec/capybara/match_style'
|
6
|
-
require_relative 'rspec/capybara/negation_matcher'
|
7
|
-
require_relative 'rspec/capybara/specific_actions'
|
8
|
-
require_relative 'rspec/capybara/specific_finders'
|
9
|
-
require_relative 'rspec/capybara/specific_matcher'
|
10
|
-
require_relative 'rspec/capybara/visibility_matcher'
|
11
|
-
|
12
|
-
require_relative 'rspec/factory_bot/attribute_defined_statically'
|
13
|
-
require_relative 'rspec/factory_bot/consistent_parentheses_style'
|
14
|
-
require_relative 'rspec/factory_bot/create_list'
|
15
|
-
require_relative 'rspec/factory_bot/factory_class_name'
|
16
|
-
require_relative 'rspec/factory_bot/factory_name_style'
|
17
|
-
require_relative 'rspec/factory_bot/syntax_methods'
|
18
|
-
|
19
|
-
require_relative 'rspec/rails/avoid_setup_hook'
|
20
|
-
require_relative 'rspec/rails/have_http_status'
|
21
|
-
require_relative 'rspec/rails/http_status'
|
22
|
-
require_relative 'rspec/rails/inferred_spec_type'
|
23
|
-
require_relative 'rspec/rails/minitest_assertions'
|
24
|
-
require_relative 'rspec/rails/negation_be_valid'
|
25
|
-
require_relative 'rspec/rails/travel_around'
|
26
|
-
|
27
3
|
require_relative 'rspec/align_left_let_brace'
|
28
4
|
require_relative 'rspec/align_right_let_brace'
|
29
5
|
require_relative 'rspec/any_instance'
|
@@ -65,7 +41,6 @@ require_relative 'rspec/expect_change'
|
|
65
41
|
require_relative 'rspec/expect_in_hook'
|
66
42
|
require_relative 'rspec/expect_in_let'
|
67
43
|
require_relative 'rspec/expect_output'
|
68
|
-
require_relative 'rspec/file_path'
|
69
44
|
require_relative 'rspec/focus'
|
70
45
|
require_relative 'rspec/hook_argument'
|
71
46
|
require_relative 'rspec/hooks_before_examples'
|
@@ -89,6 +64,7 @@ require_relative 'rspec/message_expectation'
|
|
89
64
|
require_relative 'rspec/message_spies'
|
90
65
|
require_relative 'rspec/metadata_style'
|
91
66
|
require_relative 'rspec/missing_example_group_argument'
|
67
|
+
require_relative 'rspec/missing_expectation_target_method'
|
92
68
|
require_relative 'rspec/multiple_describes'
|
93
69
|
require_relative 'rspec/multiple_expectations'
|
94
70
|
require_relative 'rspec/multiple_memoized_helpers'
|
@@ -7,29 +7,7 @@ module RuboCop
|
|
7
7
|
# Builds a YAML config file from two config hashes
|
8
8
|
class ConfigFormatter
|
9
9
|
EXTENSION_ROOT_DEPARTMENT = %r{^(RSpec/)}.freeze
|
10
|
-
SUBDEPARTMENTS =
|
11
|
-
EXTRACTED_COPS = %(
|
12
|
-
RSpec/Capybara/CurrentPathExpectation
|
13
|
-
RSpec/Capybara/MatchStyle
|
14
|
-
RSpec/Capybara/NegationMatcher
|
15
|
-
RSpec/Capybara/SpecificActions
|
16
|
-
RSpec/Capybara/SpecificFinders
|
17
|
-
RSpec/Capybara/SpecificMatcher
|
18
|
-
RSpec/Capybara/VisibilityMatcher
|
19
|
-
RSpec/FactoryBot/AttributeDefinedStatically
|
20
|
-
RSpec/FactoryBot/ConsistentParenthesesStyle
|
21
|
-
RSpec/FactoryBot/CreateList
|
22
|
-
RSpec/FactoryBot/FactoryClassName
|
23
|
-
RSpec/FactoryBot/FactoryNameStyle
|
24
|
-
RSpec/FactoryBot/SyntaxMethods
|
25
|
-
RSpec/Rails/AvoidSetupHook
|
26
|
-
RSpec/Rails/HaveHttpStatus
|
27
|
-
RSpec/Rails/HttpStatus
|
28
|
-
RSpec/Rails/InferredSpecType
|
29
|
-
RSpec/Rails/MinitestAssertions
|
30
|
-
RSpec/Rails/NegationBeValid
|
31
|
-
RSpec/Rails/TravelAround
|
32
|
-
)
|
10
|
+
SUBDEPARTMENTS = [].freeze
|
33
11
|
AMENDMENTS = %(Metrics/BlockLength)
|
34
12
|
COP_DOC_BASE_URL = 'https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/'
|
35
13
|
|
@@ -51,7 +29,6 @@ module RuboCop
|
|
51
29
|
def unified_config
|
52
30
|
cops.each_with_object(config.dup) do |cop, unified|
|
53
31
|
next if SUBDEPARTMENTS.include?(cop) || AMENDMENTS.include?(cop)
|
54
|
-
next if EXTRACTED_COPS.include?(cop)
|
55
32
|
|
56
33
|
replace_nil(unified[cop])
|
57
34
|
unified[cop].merge!(descriptions.fetch(cop))
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module RSpec
|
5
|
+
module Cop
|
6
|
+
# Source and spec generator for new cops
|
7
|
+
#
|
8
|
+
# This generator will take a cop name and generate a source file
|
9
|
+
# and spec file when given a valid qualified cop name.
|
10
|
+
# @api private
|
11
|
+
class Generator < RuboCop::Cop::Generator
|
12
|
+
def todo
|
13
|
+
<<~TODO
|
14
|
+
Do 4 steps:
|
15
|
+
1. Modify the description of #{badge} in config/default.yml
|
16
|
+
2. Implement your new cop in the generated file!
|
17
|
+
3. Add an entry about new cop to CHANGELOG.md
|
18
|
+
4. Commit your new cop with a message such as
|
19
|
+
e.g. "Add new `#{badge}` cop"
|
20
|
+
TODO
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -21,7 +21,7 @@ RSpec.shared_context 'with default RSpec/Language config' do
|
|
21
21
|
when Array
|
22
22
|
object.map { |item| deep_dup(item) }
|
23
23
|
when Hash
|
24
|
-
object.transform_values(
|
24
|
+
object.transform_values { |value| deep_dup(value) }
|
25
25
|
else
|
26
26
|
object # only collections undergo modifications and need duping
|
27
27
|
end
|
data/lib/rubocop-rspec.rb
CHANGED
@@ -4,19 +4,14 @@ require 'pathname'
|
|
4
4
|
require 'yaml'
|
5
5
|
|
6
6
|
require 'rubocop'
|
7
|
-
require 'rubocop-capybara'
|
8
|
-
require 'rubocop-factory_bot'
|
9
7
|
|
10
8
|
require_relative 'rubocop/rspec'
|
11
9
|
require_relative 'rubocop/rspec/inject'
|
12
|
-
require_relative 'rubocop/rspec/language
|
10
|
+
require_relative 'rubocop/rspec/language'
|
13
11
|
require_relative 'rubocop/rspec/node'
|
14
12
|
require_relative 'rubocop/rspec/version'
|
15
13
|
require_relative 'rubocop/rspec/wording'
|
16
14
|
|
17
|
-
# Dependent on `RuboCop::RSpec::Language::NodePattern`.
|
18
|
-
require_relative 'rubocop/rspec/language'
|
19
|
-
|
20
15
|
require_relative 'rubocop/cop/rspec/mixin/file_help'
|
21
16
|
require_relative 'rubocop/cop/rspec/mixin/final_end_location'
|
22
17
|
require_relative 'rubocop/cop/rspec/mixin/inside_example_group'
|
@@ -39,9 +34,6 @@ require_relative 'rubocop/rspec/example'
|
|
39
34
|
require_relative 'rubocop/rspec/example_group'
|
40
35
|
require_relative 'rubocop/rspec/hook'
|
41
36
|
|
42
|
-
# need after `require 'rubocop/cop/rspec/base'``
|
43
|
-
require 'rubocop-rspec_rails'
|
44
|
-
|
45
37
|
RuboCop::RSpec::Inject.defaults!
|
46
38
|
|
47
39
|
require_relative 'rubocop/cop/rspec_cops'
|
@@ -58,12 +50,4 @@ RuboCop::Cop::Layout::ExtraSpacing.singleton_class.prepend(
|
|
58
50
|
end
|
59
51
|
)
|
60
52
|
|
61
|
-
RuboCop::Cop::Style::TrailingCommaInArguments.singleton_class.prepend(
|
62
|
-
Module.new do
|
63
|
-
def autocorrect_incompatible_with
|
64
|
-
super.push(RuboCop::Cop::RSpec::Capybara::CurrentPathExpectation)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
)
|
68
|
-
|
69
53
|
RuboCop::AST::Node.include(RuboCop::RSpec::Node)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Backus
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-06-
|
13
|
+
date: 2024-06-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rubocop
|
@@ -18,56 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '1.
|
21
|
+
version: '1.61'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: '1.
|
29
|
-
- !ruby/object:Gem::Dependency
|
30
|
-
name: rubocop-capybara
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - "~>"
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: '2.17'
|
36
|
-
type: :runtime
|
37
|
-
prerelease: false
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
39
|
-
requirements:
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '2.17'
|
43
|
-
- !ruby/object:Gem::Dependency
|
44
|
-
name: rubocop-factory_bot
|
45
|
-
requirement: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '2.22'
|
50
|
-
type: :runtime
|
51
|
-
prerelease: false
|
52
|
-
version_requirements: !ruby/object:Gem::Requirement
|
53
|
-
requirements:
|
54
|
-
- - "~>"
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: '2.22'
|
57
|
-
- !ruby/object:Gem::Dependency
|
58
|
-
name: rubocop-rspec_rails
|
59
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
-
requirements:
|
61
|
-
- - "~>"
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '2.28'
|
64
|
-
type: :runtime
|
65
|
-
prerelease: false
|
66
|
-
version_requirements: !ruby/object:Gem::Requirement
|
67
|
-
requirements:
|
68
|
-
- - "~>"
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '2.28'
|
28
|
+
version: '1.61'
|
71
29
|
description: |
|
72
30
|
Code style checking for RSpec files.
|
73
31
|
A plugin for the RuboCop code style enforcing & linting tool.
|
@@ -99,14 +57,6 @@ files:
|
|
99
57
|
- lib/rubocop/cop/rspec/be_eql.rb
|
100
58
|
- lib/rubocop/cop/rspec/be_nil.rb
|
101
59
|
- lib/rubocop/cop/rspec/before_after_all.rb
|
102
|
-
- lib/rubocop/cop/rspec/capybara/current_path_expectation.rb
|
103
|
-
- lib/rubocop/cop/rspec/capybara/feature_methods.rb
|
104
|
-
- lib/rubocop/cop/rspec/capybara/match_style.rb
|
105
|
-
- lib/rubocop/cop/rspec/capybara/negation_matcher.rb
|
106
|
-
- lib/rubocop/cop/rspec/capybara/specific_actions.rb
|
107
|
-
- lib/rubocop/cop/rspec/capybara/specific_finders.rb
|
108
|
-
- lib/rubocop/cop/rspec/capybara/specific_matcher.rb
|
109
|
-
- lib/rubocop/cop/rspec/capybara/visibility_matcher.rb
|
110
60
|
- lib/rubocop/cop/rspec/change_by_zero.rb
|
111
61
|
- lib/rubocop/cop/rspec/class_check.rb
|
112
62
|
- lib/rubocop/cop/rspec/contain_exactly.rb
|
@@ -138,13 +88,6 @@ files:
|
|
138
88
|
- lib/rubocop/cop/rspec/expect_in_hook.rb
|
139
89
|
- lib/rubocop/cop/rspec/expect_in_let.rb
|
140
90
|
- lib/rubocop/cop/rspec/expect_output.rb
|
141
|
-
- lib/rubocop/cop/rspec/factory_bot/attribute_defined_statically.rb
|
142
|
-
- lib/rubocop/cop/rspec/factory_bot/consistent_parentheses_style.rb
|
143
|
-
- lib/rubocop/cop/rspec/factory_bot/create_list.rb
|
144
|
-
- lib/rubocop/cop/rspec/factory_bot/factory_class_name.rb
|
145
|
-
- lib/rubocop/cop/rspec/factory_bot/factory_name_style.rb
|
146
|
-
- lib/rubocop/cop/rspec/factory_bot/syntax_methods.rb
|
147
|
-
- lib/rubocop/cop/rspec/file_path.rb
|
148
91
|
- lib/rubocop/cop/rspec/focus.rb
|
149
92
|
- lib/rubocop/cop/rspec/hook_argument.rb
|
150
93
|
- lib/rubocop/cop/rspec/hooks_before_examples.rb
|
@@ -168,6 +111,7 @@ files:
|
|
168
111
|
- lib/rubocop/cop/rspec/message_spies.rb
|
169
112
|
- lib/rubocop/cop/rspec/metadata_style.rb
|
170
113
|
- lib/rubocop/cop/rspec/missing_example_group_argument.rb
|
114
|
+
- lib/rubocop/cop/rspec/missing_expectation_target_method.rb
|
171
115
|
- lib/rubocop/cop/rspec/mixin/comments_help.rb
|
172
116
|
- lib/rubocop/cop/rspec/mixin/empty_line_separation.rb
|
173
117
|
- lib/rubocop/cop/rspec/mixin/file_help.rb
|
@@ -191,13 +135,6 @@ files:
|
|
191
135
|
- lib/rubocop/cop/rspec/pending.rb
|
192
136
|
- lib/rubocop/cop/rspec/pending_without_reason.rb
|
193
137
|
- lib/rubocop/cop/rspec/predicate_matcher.rb
|
194
|
-
- lib/rubocop/cop/rspec/rails/avoid_setup_hook.rb
|
195
|
-
- lib/rubocop/cop/rspec/rails/have_http_status.rb
|
196
|
-
- lib/rubocop/cop/rspec/rails/http_status.rb
|
197
|
-
- lib/rubocop/cop/rspec/rails/inferred_spec_type.rb
|
198
|
-
- lib/rubocop/cop/rspec/rails/minitest_assertions.rb
|
199
|
-
- lib/rubocop/cop/rspec/rails/negation_be_valid.rb
|
200
|
-
- lib/rubocop/cop/rspec/rails/travel_around.rb
|
201
138
|
- lib/rubocop/cop/rspec/receive_counts.rb
|
202
139
|
- lib/rubocop/cop/rspec/receive_messages.rb
|
203
140
|
- lib/rubocop/cop/rspec/receive_never.rb
|
@@ -236,6 +173,7 @@ files:
|
|
236
173
|
- lib/rubocop/rspec/align_let_brace.rb
|
237
174
|
- lib/rubocop/rspec/concept.rb
|
238
175
|
- lib/rubocop/rspec/config_formatter.rb
|
176
|
+
- lib/rubocop/rspec/cop/generator.rb
|
239
177
|
- lib/rubocop/rspec/corrector/move_node.rb
|
240
178
|
- lib/rubocop/rspec/description_extractor.rb
|
241
179
|
- lib/rubocop/rspec/example.rb
|
@@ -243,7 +181,6 @@ files:
|
|
243
181
|
- lib/rubocop/rspec/hook.rb
|
244
182
|
- lib/rubocop/rspec/inject.rb
|
245
183
|
- lib/rubocop/rspec/language.rb
|
246
|
-
- lib/rubocop/rspec/language/node_pattern.rb
|
247
184
|
- lib/rubocop/rspec/node.rb
|
248
185
|
- lib/rubocop/rspec/shared_contexts/default_rspec_language_config_context.rb
|
249
186
|
- lib/rubocop/rspec/version.rb
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Capybara
|
7
|
-
# @!parse
|
8
|
-
# # Checks that no expectations are set on Capybara's `current_path`.
|
9
|
-
# #
|
10
|
-
# # The
|
11
|
-
# # https://www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/RSpecMatchers#have_current_path-instance_method[`have_current_path` matcher]
|
12
|
-
# # should be used on `page` to set expectations on Capybara's
|
13
|
-
# # current path, since it uses
|
14
|
-
# # https://github.com/teamcapybara/capybara/blob/master/README.md#asynchronous-javascript-ajax-and-friends[Capybara's waiting functionality]
|
15
|
-
# # which ensures that preceding actions (like `click_link`) have
|
16
|
-
# # completed.
|
17
|
-
# #
|
18
|
-
# # This cop does not support autocorrection in some cases.
|
19
|
-
# #
|
20
|
-
# # @example
|
21
|
-
# # # bad
|
22
|
-
# # expect(current_path).to eq('/callback')
|
23
|
-
# #
|
24
|
-
# # # good
|
25
|
-
# # expect(page).to have_current_path('/callback')
|
26
|
-
# #
|
27
|
-
# # # bad (does not support autocorrection)
|
28
|
-
# # expect(page.current_path).to match(variable)
|
29
|
-
# #
|
30
|
-
# # # good
|
31
|
-
# # expect(page).to have_current_path('/callback')
|
32
|
-
# #
|
33
|
-
# class CurrentPathExpectation < ::RuboCop::Cop::Base; end
|
34
|
-
CurrentPathExpectation =
|
35
|
-
::RuboCop::Cop::Capybara::CurrentPathExpectation
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,104 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Capybara
|
7
|
-
# Checks for consistent method usage in feature specs.
|
8
|
-
#
|
9
|
-
# By default, the cop disables all Capybara-specific methods that have
|
10
|
-
# the same native RSpec method (e.g. are just aliases). Some teams
|
11
|
-
# however may prefer using some of the Capybara methods (like `feature`)
|
12
|
-
# to make it obvious that the test uses Capybara, while still disable
|
13
|
-
# the rest of the methods, like `given` (alias for `let`), `background`
|
14
|
-
# (alias for `before`), etc. You can configure which of the methods to
|
15
|
-
# be enabled by using the EnabledMethods configuration option.
|
16
|
-
#
|
17
|
-
# @example
|
18
|
-
# # bad
|
19
|
-
# feature 'User logs in' do
|
20
|
-
# given(:user) { User.new }
|
21
|
-
#
|
22
|
-
# background do
|
23
|
-
# visit new_session_path
|
24
|
-
# end
|
25
|
-
#
|
26
|
-
# scenario 'with OAuth' do
|
27
|
-
# # ...
|
28
|
-
# end
|
29
|
-
# end
|
30
|
-
#
|
31
|
-
# # good
|
32
|
-
# describe 'User logs in' do
|
33
|
-
# let(:user) { User.new }
|
34
|
-
#
|
35
|
-
# before do
|
36
|
-
# visit new_session_path
|
37
|
-
# end
|
38
|
-
#
|
39
|
-
# it 'with OAuth' do
|
40
|
-
# # ...
|
41
|
-
# end
|
42
|
-
# end
|
43
|
-
#
|
44
|
-
class FeatureMethods < Base
|
45
|
-
extend AutoCorrector
|
46
|
-
include InsideExampleGroup
|
47
|
-
|
48
|
-
MSG = 'Use `%<replacement>s` instead of `%<method>s`.'
|
49
|
-
|
50
|
-
# https://github.com/teamcapybara/capybara/blob/e283c1aeaa72441f5403963577e16333bf111a81/lib/capybara/rspec/features.rb#L31-L36
|
51
|
-
MAP = {
|
52
|
-
background: :before,
|
53
|
-
scenario: :it,
|
54
|
-
xscenario: :xit,
|
55
|
-
given: :let,
|
56
|
-
given!: :let!,
|
57
|
-
feature: :describe
|
58
|
-
}.freeze
|
59
|
-
|
60
|
-
# @!method capybara_speak(node)
|
61
|
-
def_node_matcher :capybara_speak, <<~PATTERN
|
62
|
-
{#{MAP.keys.map(&:inspect).join(' ')}}
|
63
|
-
PATTERN
|
64
|
-
|
65
|
-
# @!method feature_method(node)
|
66
|
-
def_node_matcher :feature_method, <<~PATTERN
|
67
|
-
(block
|
68
|
-
$(send #rspec? $#capybara_speak ...)
|
69
|
-
...)
|
70
|
-
PATTERN
|
71
|
-
|
72
|
-
def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler
|
73
|
-
return unless inside_example_group?(node)
|
74
|
-
|
75
|
-
feature_method(node) do |send_node, match|
|
76
|
-
next if enabled?(match)
|
77
|
-
|
78
|
-
add_offense(send_node.loc.selector) do |corrector|
|
79
|
-
corrector.replace(send_node.loc.selector, MAP[match].to_s)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def message(range)
|
85
|
-
name = range.source.to_sym
|
86
|
-
format(MSG, method: name, replacement: MAP[name])
|
87
|
-
end
|
88
|
-
|
89
|
-
private
|
90
|
-
|
91
|
-
def enabled?(method_name)
|
92
|
-
enabled_methods.include?(method_name)
|
93
|
-
end
|
94
|
-
|
95
|
-
def enabled_methods
|
96
|
-
cop_config
|
97
|
-
.fetch('EnabledMethods', [])
|
98
|
-
.map(&:to_sym)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|