class RuboCop::Cop::RSpec::RepeatedDescription
end
end
# …
it ‘is valid’, :flag do
end
# …
it ‘is valid’ do
RSpec.describe User do
# good
end
end
# …
it ‘is valid when last name only is present’ do
end
# …
it ‘is valid when first and last name are present’ do
RSpec.describe User do
# good
end
end
# …
it ‘is valid’ do
end
# …
it ‘is valid’ do
RSpec.describe User do
# bad
@example
Check for repeated description strings in example groups.
def example_signature(example)
def example_signature(example) [example.metadata, example.doc_string] end
def its_signature(example)
def its_signature(example) [example.doc_string, example] end
def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler
def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler return unless example_group?(node) repeated_descriptions(node).each do |description| add_offense(description) end repeated_its(node).each do |its| add_offense(its) end end
def repeated_descriptions(node)
def repeated_descriptions(node) grouped_examples = RuboCop::RSpec::ExampleGroup.new(node) .examples .reject { |n| n.definition.method?(:its) } .group_by { |example| example_signature(example) } grouped_examples .select { |signatures, group| signatures.any? && group.size > 1 } .values .flatten .map(&:definition) end
def repeated_its(node)
def repeated_its(node) grouped_its = RuboCop::RSpec::ExampleGroup.new(node) .examples .select { |n| n.definition.method?(:its) } .group_by { |example| its_signature(example) } grouped_its .select { |signatures, group| signatures.any? && group.size > 1 } .values .flatten .map(&:to_node) end