rubocop-rspec 2.7.0 → 2.10.0

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.
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module RSpec
6
+ # Check for expectations where `be(...)` can replace `eq(...)`.
7
+ #
8
+ # The `be` matcher compares by identity while the `eq` matcher compares
9
+ # using `==`. Booleans and nil can be compared by identity and therefore
10
+ # the `be` matcher is preferable as it is a more strict test.
11
+ #
12
+ # @example
13
+ #
14
+ # # bad
15
+ # expect(foo).to eq(true)
16
+ # expect(foo).to eq(false)
17
+ # expect(foo).to eq(nil)
18
+ #
19
+ # # good
20
+ # expect(foo).to be(true)
21
+ # expect(foo).to be(false)
22
+ # expect(foo).to be(nil)
23
+ #
24
+ class BeEq < Base
25
+ extend AutoCorrector
26
+
27
+ MSG = 'Prefer `be` over `eq`.'
28
+ RESTRICT_ON_SEND = %i[eq].freeze
29
+
30
+ # @!method eq_type_with_identity?(node)
31
+ def_node_matcher :eq_type_with_identity?, <<-PATTERN
32
+ (send nil? :eq {true false nil})
33
+ PATTERN
34
+
35
+ def on_send(node)
36
+ return unless eq_type_with_identity?(node)
37
+
38
+ add_offense(node.loc.selector) do |corrector|
39
+ corrector.replace(node.loc.selector, 'be')
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -43,7 +43,7 @@ module RuboCop
43
43
 
44
44
  # @!method eql_type_with_identity(node)
45
45
  def_node_matcher :eql_type_with_identity, <<-PATTERN
46
- (send _ :to $(send nil? :eql {true false int float sym nil_type?}))
46
+ (send _ :to $(send nil? :eql {true false int float sym nil}))
47
47
  PATTERN
48
48
 
49
49
  def on_send(node)
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module RSpec
6
+ # Ensures a consistent style is used when matching `nil`.
7
+ #
8
+ # You can either use the more specific `be_nil` matcher, or the more
9
+ # generic `be` matcher with a `nil` argument.
10
+ #
11
+ # This cop can be configured using the `EnforcedStyle` option
12
+ #
13
+ # @example `EnforcedStyle: be_nil` (default)
14
+ # # bad
15
+ # expect(foo).to be(nil)
16
+ #
17
+ # # good
18
+ # expect(foo).to be_nil
19
+ #
20
+ # @example `EnforcedStyle: be`
21
+ # # bad
22
+ # expect(foo).to be_nil
23
+ #
24
+ # # good
25
+ # expect(foo).to be(nil)
26
+ #
27
+ class BeNil < Base
28
+ extend AutoCorrector
29
+ include ConfigurableEnforcedStyle
30
+
31
+ BE_MSG = 'Prefer `be(nil)` over `be_nil`.'
32
+ BE_NIL_MSG = 'Prefer `be_nil` over `be(nil)`.'
33
+ RESTRICT_ON_SEND = %i[be be_nil].freeze
34
+
35
+ # @!method be_nil_matcher?(node)
36
+ def_node_matcher :be_nil_matcher?, <<-PATTERN
37
+ (send nil? :be_nil)
38
+ PATTERN
39
+
40
+ # @!method nil_value_expectation?(node)
41
+ def_node_matcher :nil_value_expectation?, <<-PATTERN
42
+ (send nil? :be nil)
43
+ PATTERN
44
+
45
+ def on_send(node)
46
+ case style
47
+ when :be
48
+ check_be_style(node)
49
+ when :be_nil
50
+ check_be_nil_style(node)
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def check_be_style(node)
57
+ return unless be_nil_matcher?(node)
58
+
59
+ add_offense(node, message: BE_MSG) do |corrector|
60
+ corrector.replace(node.loc.expression, 'be(nil)')
61
+ end
62
+ end
63
+
64
+ def check_be_nil_style(node)
65
+ return unless nil_value_expectation?(node)
66
+
67
+ add_offense(node, message: BE_NIL_MSG) do |corrector|
68
+ corrector.replace(node.loc.expression, 'be_nil')
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -6,13 +6,13 @@ module RuboCop
6
6
  module Capybara
7
7
  # Checks that no expectations are set on Capybara's `current_path`.
8
8
  #
9
- # The `have_current_path` matcher (https://www.rubydoc.info/github/
10
- # teamcapybara/capybara/master/Capybara/RSpecMatchers#have_current_path-
11
- # instance_method) should be used on `page` to set expectations on
12
- # Capybara's current path, since it uses Capybara's waiting
13
- # functionality (https://github.com/teamcapybara/capybara/blob/master/
14
- # README.md#asynchronous-javascript-ajax-and-friends) which ensures that
15
- # preceding actions (like `click_link`) have completed.
9
+ # The
10
+ # https://www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/RSpecMatchers#have_current_path-instance_method[`have_current_path` matcher]
11
+ # should be used on `page` to set expectations on Capybara's
12
+ # current path, since it uses
13
+ # https://github.com/teamcapybara/capybara/blob/master/README.md#asynchronous-javascript-ajax-and-friends[Capybara's waiting functionality]
14
+ # which ensures that preceding actions (like `click_link`) have
15
+ # completed.
16
16
  #
17
17
  # @example
18
18
  # # bad
@@ -52,6 +52,10 @@ module RuboCop
52
52
  $(send nil? :match (str $_)))
53
53
  PATTERN
54
54
 
55
+ def self.autocorrect_incompatible_with
56
+ [Style::TrailingCommaInArguments]
57
+ end
58
+
55
59
  def on_send(node)
56
60
  expectation_set_on_current_path(node) do
57
61
  add_offense(node.loc.selector) do |corrector|
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Cop
5
5
  module RSpec
6
6
  module Capybara
7
- # Checks for boolean visibility in capybara finders.
7
+ # Checks for boolean visibility in Capybara finders.
8
8
  #
9
9
  # Capybara lets you find elements that match a certain visibility using
10
10
  # the `:visible` option. `:visible` accepts both boolean and symbols as
@@ -12,7 +12,8 @@ module RuboCop
12
12
  # false` does not find just invisible elements, but both visible and
13
13
  # invisible elements. For expressiveness and clarity, use one of the
14
14
  # symbol values, `:all`, `:hidden` or `:visible`.
15
- # (https://www.rubydoc.info/gems/capybara/Capybara%2FNode%2FFinders:all)
15
+ # Read more in
16
+ # https://www.rubydoc.info/gems/capybara/Capybara%2FNode%2FFinders:all[the documentation].
16
17
  #
17
18
  # @example
18
19
  #
@@ -145,7 +145,7 @@ module RuboCop
145
145
  return true unless body
146
146
  return false if conditionals_with_examples?(body)
147
147
 
148
- if body.if_type?
148
+ if body.if_type? || body.case_type?
149
149
  !examples_in_branches?(body)
150
150
  else
151
151
  !examples?(body)
@@ -153,15 +153,15 @@ module RuboCop
153
153
  end
154
154
 
155
155
  def conditionals_with_examples?(body)
156
- return unless body.begin_type?
156
+ return unless body.begin_type? || body.case_type?
157
157
 
158
- body.each_descendant(:if).any? do |if_node|
159
- examples_in_branches?(if_node)
158
+ body.each_descendant(:if, :case).any? do |condition_node|
159
+ examples_in_branches?(condition_node)
160
160
  end
161
161
  end
162
162
 
163
- def examples_in_branches?(if_node)
164
- if_node.branches.any? { |branch| examples?(branch) }
163
+ def examples_in_branches?(condition_node)
164
+ condition_node.branches.any? { |branch| examples?(branch) }
165
165
  end
166
166
  end
167
167
  end
@@ -17,24 +17,18 @@ module RuboCop
17
17
  class EmptyLineAfterSubject < Base
18
18
  extend AutoCorrector
19
19
  include EmptyLineSeparation
20
+ include InsideExampleGroup
20
21
 
21
22
  MSG = 'Add an empty line after `%<subject>s`.'
22
23
 
23
24
  def on_block(node)
24
- return unless subject?(node) && !in_spec_block?(node)
25
+ return unless subject?(node)
26
+ return unless inside_example_group?(node)
25
27
 
26
28
  missing_separating_line_offense(node) do |method|
27
29
  format(MSG, subject: method)
28
30
  end
29
31
  end
30
-
31
- private
32
-
33
- def in_spec_block?(node)
34
- node.each_ancestor(:block).any? do |ancestor|
35
- Examples.all(ancestor.method_name)
36
- end
37
- end
38
32
  end
39
33
  end
40
34
  end
@@ -33,11 +33,13 @@ module RuboCop
33
33
  #
34
34
  class LeadingSubject < Base
35
35
  extend AutoCorrector
36
+ include InsideExampleGroup
36
37
 
37
38
  MSG = 'Declare `subject` above any other `%<offending>s` declarations.'
38
39
 
39
40
  def on_block(node)
40
- return unless subject?(node) && !in_spec_block?(node)
41
+ return unless subject?(node)
42
+ return unless inside_example_group?(node)
41
43
 
42
44
  check_previous_nodes(node)
43
45
  end
@@ -78,12 +80,6 @@ module RuboCop
78
80
  spec_group?(node) ||
79
81
  include?(node)
80
82
  end
81
-
82
- def in_spec_block?(node)
83
- node.each_ancestor(:block).any? do |ancestor|
84
- example?(ancestor)
85
- end
86
- end
87
83
  end
88
84
  end
89
85
  end
@@ -9,11 +9,11 @@ module RuboCop
9
9
  private
10
10
 
11
11
  def inside_example_group?(node)
12
- return example_group?(node) if example_group_root?(node)
12
+ return spec_group?(node) if example_group_root?(node)
13
13
 
14
14
  root = node.ancestors.find { |parent| example_group_root?(parent) }
15
15
 
16
- example_group?(root)
16
+ spec_group?(root)
17
17
  end
18
18
 
19
19
  def example_group_root?(node)
@@ -7,6 +7,9 @@ module RuboCop
7
7
  module RSpec
8
8
  # Checks for stubbed test subjects.
9
9
  #
10
+ # Checks nested subject stubs for innermost subject definition
11
+ # when subject is also defined in parent example groups.
12
+ #
10
13
  # @see https://robots.thoughtbot.com/don-t-stub-the-system-under-test
11
14
  # @see https://samphippen.com/introducing-rspec-smells-and-where-to-find-them#smell-1-stubject
12
15
  # @see https://github.com/rubocop-hq/rspec-style-guide#dont-stub-subject
@@ -22,6 +25,20 @@ module RuboCop
22
25
  # end
23
26
  # end
24
27
  #
28
+ # # bad
29
+ # describe Article do
30
+ # subject(:foo) { Article.new }
31
+ #
32
+ # context 'nested subject' do
33
+ # subject(:article) { Article.new }
34
+ #
35
+ # it 'indicates that the author is unknown' do
36
+ # allow(article).to receive(:author).and_return(nil)
37
+ # expect(article.description).to include('by an unknown author')
38
+ # end
39
+ # end
40
+ # end
41
+ #
25
42
  # # good
26
43
  # describe Article do
27
44
  # subject(:article) { Article.new(author: nil) }
@@ -36,27 +53,35 @@ module RuboCop
36
53
 
37
54
  MSG = 'Do not stub methods of the object under test.'
38
55
 
39
- # @!method subject(node)
56
+ # @!method subject?(node)
40
57
  # Find a named or unnamed subject definition
41
58
  #
42
59
  # @example anonymous subject
43
- # subject(parse('subject { foo }').ast) do |name|
60
+ # subject?(parse('subject { foo }').ast) do |name|
44
61
  # name # => :subject
45
62
  # end
46
63
  #
47
64
  # @example named subject
48
- # subject(parse('subject(:thing) { foo }').ast) do |name|
65
+ # subject?(parse('subject(:thing) { foo }').ast) do |name|
49
66
  # name # => :thing
50
67
  # end
51
68
  #
52
69
  # @param node [RuboCop::AST::Node]
53
70
  #
54
71
  # @yield [Symbol] subject name
55
- def_node_matcher :subject, <<-PATTERN
56
- (block
57
- (send nil?
58
- {:subject (sym $_) | $:subject}
59
- ) args ...)
72
+ def_node_matcher :subject?, <<-PATTERN
73
+ (block
74
+ (send nil?
75
+ {:subject (sym $_) | $:subject}
76
+ ) args ...)
77
+ PATTERN
78
+
79
+ # @!method let?(node)
80
+ # Find a memoized helper
81
+ def_node_matcher :let?, <<-PATTERN
82
+ (block
83
+ (send nil? :let (sym $_)
84
+ ) args ...)
60
85
  PATTERN
61
86
 
62
87
  # @!method message_expectation?(node, method_name)
@@ -73,7 +98,7 @@ module RuboCop
73
98
  def_node_matcher :message_expectation?, <<-PATTERN
74
99
  (send
75
100
  {
76
- (send nil? { :expect :allow } (send nil? {% :subject}))
101
+ (send nil? { :expect :allow } (send nil? %))
77
102
  (send nil? :is_expected)
78
103
  }
79
104
  #Runners.all
@@ -89,7 +114,8 @@ module RuboCop
89
114
  PATTERN
90
115
 
91
116
  def on_top_level_group(node)
92
- @explicit_subjects = find_all_explicit_subjects(node)
117
+ @explicit_subjects = find_all_explicit(node, &method(:subject?))
118
+ @subject_overrides = find_all_explicit(node, &method(:let?))
93
119
 
94
120
  find_subject_expectations(node) do |stub|
95
121
  add_offense(stub)
@@ -98,12 +124,12 @@ module RuboCop
98
124
 
99
125
  private
100
126
 
101
- def find_all_explicit_subjects(node)
127
+ def find_all_explicit(node)
102
128
  node.each_descendant(:block).with_object({}) do |child, h|
103
- name = subject(child)
129
+ name = yield(child)
104
130
  next unless name
105
131
 
106
- outer_example_group = child.each_ancestor.find do |a|
132
+ outer_example_group = child.each_ancestor(:block).find do |a|
107
133
  example_group?(a)
108
134
  end
109
135
 
@@ -113,14 +139,14 @@ module RuboCop
113
139
  end
114
140
 
115
141
  def find_subject_expectations(node, subject_names = [], &block)
116
- subject_names = @explicit_subjects[node] if @explicit_subjects[node]
142
+ subject_names = [*subject_names, *@explicit_subjects[node]]
143
+ subject_names -= @subject_overrides[node] if @subject_overrides[node]
117
144
 
118
- expectation_detected = (subject_names + [:subject]).any? do |name|
119
- message_expectation?(node, name)
120
- end
145
+ names = Set[*subject_names, :subject]
146
+ expectation_detected = message_expectation?(node, names)
121
147
  return yield(node) if expectation_detected
122
148
 
123
- node.each_child_node do |child|
149
+ node.each_child_node(:send, :def, :block, :begin) do |child|
124
150
  find_subject_expectations(child, subject_names, &block)
125
151
  end
126
152
  end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module RSpec
6
+ # Checks for consistent verified double reference style.
7
+ #
8
+ # Only investigates references that are one of the supported styles.
9
+ #
10
+ # @see https://relishapp.com/rspec/rspec-mocks/docs/verifying-doubles
11
+ #
12
+ # This cop can be configured in your configuration using the
13
+ # `EnforcedStyle` option and supports `--auto-gen-config`.
14
+ #
15
+ # @example `EnforcedStyle: constant` (default)
16
+ # # bad
17
+ # let(:foo) do
18
+ # instance_double('ClassName', method_name: 'returned_value')
19
+ # end
20
+ #
21
+ # # good
22
+ # let(:foo) do
23
+ # instance_double(ClassName, method_name: 'returned_value')
24
+ # end
25
+ #
26
+ # @example `EnforcedStyle: string`
27
+ # # bad
28
+ # let(:foo) do
29
+ # instance_double(ClassName, method_name: 'returned_value')
30
+ # end
31
+ #
32
+ # # good
33
+ # let(:foo) do
34
+ # instance_double('ClassName', method_name: 'returned_value')
35
+ # end
36
+ #
37
+ # @example Reference is not in the supported style list. No enforcement
38
+ #
39
+ # # good
40
+ # let(:foo) do
41
+ # instance_double(@klass, method_name: 'returned_value')
42
+ # end
43
+ class VerifiedDoubleReference < Base
44
+ extend AutoCorrector
45
+ include ConfigurableEnforcedStyle
46
+
47
+ MSG = 'Use a %<style>s class reference for verified doubles.'
48
+
49
+ RESTRICT_ON_SEND = Set[
50
+ :class_double,
51
+ :class_spy,
52
+ :instance_double,
53
+ :instance_spy,
54
+ :mock_model,
55
+ :object_double,
56
+ :object_spy,
57
+ :stub_model
58
+ ].freeze
59
+
60
+ REFERENCE_TYPE_STYLES = {
61
+ str: :string,
62
+ const: :constant
63
+ }.freeze
64
+
65
+ # @!method verified_double(node)
66
+ def_node_matcher :verified_double, <<~PATTERN
67
+ (send
68
+ nil?
69
+ RESTRICT_ON_SEND
70
+ $_class_reference
71
+ ...)
72
+ PATTERN
73
+
74
+ def on_send(node)
75
+ verified_double(node) do |class_reference|
76
+ break correct_style_detected unless opposing_style?(class_reference)
77
+
78
+ message = format(MSG, style: style)
79
+ expression = class_reference.loc.expression
80
+
81
+ add_offense(expression, message: message) do |corrector|
82
+ violation = class_reference.children.last.to_s
83
+ corrector.replace(expression, correct_style(violation))
84
+
85
+ opposite_style_detected
86
+ end
87
+ end
88
+ end
89
+
90
+ private
91
+
92
+ def opposing_style?(class_reference)
93
+ class_reference_style = REFERENCE_TYPE_STYLES[class_reference.type]
94
+
95
+ # Only enforce supported styles
96
+ return false unless class_reference_style
97
+
98
+ class_reference_style != style
99
+ end
100
+
101
+ def correct_style(violation)
102
+ if style == :string
103
+ "'#{violation}'"
104
+ else
105
+ violation
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -10,7 +10,7 @@ module RuboCop
10
10
  # allow(foo).to receive(:bar) { |&block| block.call(1) }
11
11
  #
12
12
  # # good
13
- # expect(foo).to be(:bar).and_yield(1)
13
+ # expect(foo).to receive(:bar).and_yield(1)
14
14
  class Yield < Base
15
15
  extend AutoCorrector
16
16
  include RangeHelp
@@ -21,7 +21,9 @@ require_relative 'rspec/align_right_let_brace'
21
21
  require_relative 'rspec/any_instance'
22
22
  require_relative 'rspec/around_block'
23
23
  require_relative 'rspec/be'
24
+ require_relative 'rspec/be_eq'
24
25
  require_relative 'rspec/be_eql'
26
+ require_relative 'rspec/be_nil'
25
27
  require_relative 'rspec/before_after_all'
26
28
  require_relative 'rspec/context_method'
27
29
  require_relative 'rspec/context_wording'
@@ -95,6 +97,7 @@ require_relative 'rspec/subject_stub'
95
97
  require_relative 'rspec/unspecified_exception'
96
98
  require_relative 'rspec/variable_definition'
97
99
  require_relative 'rspec/variable_name'
100
+ require_relative 'rspec/verified_double_reference'
98
101
  require_relative 'rspec/verified_doubles'
99
102
  require_relative 'rspec/void_expect'
100
103
  require_relative 'rspec/yield'
@@ -8,7 +8,7 @@ module RuboCop
8
8
  class ConfigFormatter
9
9
  EXTENSION_ROOT_DEPARTMENT = %r{^(RSpec/)}.freeze
10
10
  SUBDEPARTMENTS = %(RSpec/Capybara RSpec/FactoryBot RSpec/Rails)
11
- STYLE_GUIDE_BASE_URL = 'https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/'
11
+ COP_DOC_BASE_URL = 'https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/'
12
12
 
13
13
  def initialize(config, descriptions)
14
14
  @config = config
@@ -27,9 +27,8 @@ module RuboCop
27
27
  cops.each_with_object(config.dup) do |cop, unified|
28
28
  next if SUBDEPARTMENTS.include?(cop)
29
29
 
30
- unified[cop] = config.fetch(cop)
31
- .merge(descriptions.fetch(cop))
32
- .merge('StyleGuide' => STYLE_GUIDE_BASE_URL + cop.sub('RSpec/', ''))
30
+ unified[cop].merge!(descriptions.fetch(cop))
31
+ unified[cop]['Reference'] = COP_DOC_BASE_URL + cop.sub('RSpec/', '')
33
32
  end
34
33
  end
35
34
 
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module RSpec
5
5
  # Version information for the RSpec RuboCop plugin.
6
6
  module Version
7
- STRING = '2.7.0'
7
+ STRING = '2.10.0'
8
8
  end
9
9
  end
10
10
  end
data/lib/rubocop-rspec.rb CHANGED
@@ -37,16 +37,21 @@ require_relative 'rubocop/cop/rspec_cops'
37
37
  # We have to register our autocorrect incompatibilities in RuboCop's cops
38
38
  # as well so we do not hit infinite loops
39
39
 
40
- module RuboCop
41
- module Cop
42
- module Layout
43
- class ExtraSpacing # rubocop:disable Style/Documentation
44
- def self.autocorrect_incompatible_with
45
- [RSpec::AlignLeftLetBrace, RSpec::AlignRightLetBrace]
46
- end
47
- end
40
+ RuboCop::Cop::Layout::ExtraSpacing.singleton_class.prepend(
41
+ Module.new do
42
+ def autocorrect_incompatible_with
43
+ super.push(RuboCop::Cop::RSpec::AlignLeftLetBrace)
44
+ .push(RuboCop::Cop::RSpec::AlignRightLetBrace)
48
45
  end
49
46
  end
50
- end
47
+ )
48
+
49
+ RuboCop::Cop::Style::TrailingCommaInArguments.singleton_class.prepend(
50
+ Module.new do
51
+ def autocorrect_incompatible_with
52
+ super.push(RuboCop::Cop::RSpec::Capybara::CurrentPathExpectation)
53
+ end
54
+ end
55
+ )
51
56
 
52
57
  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: 2.7.0
4
+ version: 2.10.0
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: 2021-12-26 00:00:00.000000000 Z
13
+ date: 2022-04-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -135,7 +135,9 @@ files:
135
135
  - lib/rubocop/cop/rspec/around_block.rb
136
136
  - lib/rubocop/cop/rspec/base.rb
137
137
  - lib/rubocop/cop/rspec/be.rb
138
+ - lib/rubocop/cop/rspec/be_eq.rb
138
139
  - lib/rubocop/cop/rspec/be_eql.rb
140
+ - lib/rubocop/cop/rspec/be_nil.rb
139
141
  - lib/rubocop/cop/rspec/before_after_all.rb
140
142
  - lib/rubocop/cop/rspec/capybara/current_path_expectation.rb
141
143
  - lib/rubocop/cop/rspec/capybara/feature_methods.rb
@@ -224,6 +226,7 @@ files:
224
226
  - lib/rubocop/cop/rspec/unspecified_exception.rb
225
227
  - lib/rubocop/cop/rspec/variable_definition.rb
226
228
  - lib/rubocop/cop/rspec/variable_name.rb
229
+ - lib/rubocop/cop/rspec/verified_double_reference.rb
227
230
  - lib/rubocop/cop/rspec/verified_doubles.rb
228
231
  - lib/rubocop/cop/rspec/void_expect.rb
229
232
  - lib/rubocop/cop/rspec/yield.rb