class RuboCop::Cop::RSpec::EmptyExampleGroup

Checks if an example group does not include any tests.

This cop is configurable using the `CustomIncludeMethods` option

@example usage

# bad
describe Bacon do
  let(:bacon)      { Bacon.new(chunkiness) }
  let(:chunkiness) { false                 }

  context 'extra chunky' do   # flagged by rubocop
    let(:chunkiness) { true }
  end

  it 'is chunky' do
    expect(bacon.chunky?).to be_truthy
  end
end

# good
describe Bacon do
  let(:bacon)      { Bacon.new(chunkiness) }
  let(:chunkiness) { false                 }

  it 'is chunky' do
    expect(bacon.chunky?).to be_truthy
  end
end

@example configuration

# .rubocop.yml
# RSpec/EmptyExampleGroup:
#   CustomIncludeMethods:
#   - include_tests

# spec_helper.rb
RSpec.configure do |config|
  config.alias_it_behaves_like_to(:include_tests)
end

# bacon_spec.rb
describe Bacon do
  let(:bacon)      { Bacon.new(chunkiness) }
  let(:chunkiness) { false                 }

  context 'extra chunky' do   # not flagged by rubocop
    let(:chunkiness) { true }

    include_tests 'shared tests'
  end
end

Constants

MSG

Public Instance Methods

on_block(node) click to toggle source
# File lib/rubocop/cop/rspec/empty_example_group.rb, line 70
def on_block(node)
  return unless example_group?(node) && !contains_example?(node)

  add_offense(node.send_node, location: :expression)
end

Private Instance Methods

custom_include?(method_name) click to toggle source
# File lib/rubocop/cop/rspec/empty_example_group.rb, line 78
def custom_include?(method_name)
  custom_include_methods.include?(method_name)
end
custom_include_methods() click to toggle source
# File lib/rubocop/cop/rspec/empty_example_group.rb, line 82
def custom_include_methods
  cop_config
    .fetch('CustomIncludeMethods', [])
    .map(&:to_sym)
end