class RuboCop::Cop::RSpec::RepeatedExample

Check for repeated examples within example groups.

@example

it 'is valid' do
  expect(user).to be_valid
end

it 'validates the user' do
  expect(user).to be_valid
end

Constants

MSG

Public Instance Methods

on_block(node) click to toggle source
# File lib/rubocop/cop/rspec/repeated_example.rb, line 19
def on_block(node)
  return unless example_group?(node)

  repeated_examples(node).each do |repeated_example|
    add_offense(repeated_example, location: :expression)
  end
end

Private Instance Methods

example_signature(example) click to toggle source
# File lib/rubocop/cop/rspec/repeated_example.rb, line 39
def example_signature(example)
  key_parts = [example.metadata, example.implementation]

  if example.definition.method_name == :its
    key_parts << example.definition.arguments
  end

  key_parts
end
repeated_examples(node) click to toggle source
# File lib/rubocop/cop/rspec/repeated_example.rb, line 29
def repeated_examples(node)
  RuboCop::RSpec::ExampleGroup.new(node)
    .examples
    .group_by { |example| example_signature(example) }
    .values
    .reject(&:one?)
    .flatten
    .map(&:to_node)
end