Class: RuboCop::Cop::RSpec::RepeatedExampleGroupDescription

Inherits:
Base
  • Object
show all
Includes:
RepeatedItems, SkipOrPending
Defined in:
lib/rubocop/cop/rspec/repeated_example_group_description.rb

Overview

Check for repeated example group descriptions.

Examples:

# bad
describe 'cool feature' do
  # example group
end

describe 'cool feature' do
  # example group
end

# bad
context 'when case x' do
  # example group
end

describe 'when case x' do
  # example group
end

# good
describe 'cool feature' do
  # example group
end

describe 'another cool feature' do
  # example group
end

# good
context 'when case x' do
  # example group
end

context 'when another case' do
  # example group
end

Constant Summary collapse

MSG =
'Repeated %<group>s block description on line(s) %<loc>s'

Instance Method Summary collapse

Methods included from RepeatedItems

#add_repeated_lines, #find_repeated_groups

Methods included from SkipOrPending

#skip_or_pending_inside_block?, #skipped_in_metadata?

Methods inherited from Base

inherited, #on_new_investigation

Methods included from RSpec::Language

#example?, #example_group?, #example_group_with_body?, #explicit_rspec?, #hook?, #include?, #let?, #rspec?, #shared_group?, #spec_group?, #subject?

Instance Method Details

#doc_string_and_metadata(node) ⇒ Object



57
58
59
# File 'lib/rubocop/cop/rspec/repeated_example_group_description.rb', line 57

def_node_matcher :doc_string_and_metadata, <<~PATTERN
  (block (send _ _ $_ $...) ...)
PATTERN

#empty_description?(node) ⇒ Object



62
# File 'lib/rubocop/cop/rspec/repeated_example_group_description.rb', line 62

def_node_matcher :empty_description?, '(block (send _ _) ...)'

#on_begin(node) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/rubocop/cop/rspec/repeated_example_group_description.rb', line 64

def on_begin(node)
  return unless several_example_groups?(node)

  repeated_group_descriptions(node).each do |group, repeats|
    add_offense(group, message: message(group, repeats))
  end
end

#several_example_groups?(node) ⇒ Object



52
53
54
# File 'lib/rubocop/cop/rspec/repeated_example_group_description.rb', line 52

def_node_matcher :several_example_groups?, <<~PATTERN
  (begin <#example_group? #example_group? ...>)
PATTERN