class RuboCop::Cop::RSpec::RepeatedExampleGroupDescription
end
# example group
context ‘when another case’ do
end
# example group
context ‘when case x’ do
# good
end
# example group
describe ‘another cool feature’ do
end
# example group
describe ‘cool feature’ do
# good
end
# example group
describe ‘when case x’ do
end
# example group
context ‘when case x’ do
# bad
end
# example group
describe ‘cool feature’ do
end
# example group
describe ‘cool feature’ do
# bad
@example
Check for repeated example group descriptions.
def add_repeated_lines(groups)
def add_repeated_lines(groups) repeated_lines = groups.map(&:first_line) groups.map { |group| [group, repeated_lines - [group.first_line]] } end
def message(group, repeats)
def message(group, repeats) format(MSG, group: group.method_name, loc: repeats) end
def on_begin(node)
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
def repeated_group_descriptions(node)
def repeated_group_descriptions(node) node .children .select { |child| example_group?(child) } .reject { |child| skip_or_pending?(child) } .reject { |child| empty_description?(child) } .group_by { |group| doc_string_and_metadata(group) } .values .reject(&:one?) .flat_map { |groups| add_repeated_lines(groups) } end