class RuboCop::Cop::RSpec::Focused

Tests should not be focused.

@example

# bad
fit 'does something' do
  expect(foo).to be_empty
end

it 'does something', focus: true do
  expect(foo).to be_empty
end

# good
it 'does something' do
  expect(foo).to be_empty
end

Constants

FOCUSED_METHODS
MESSAGE

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/rspec/focused.rb, line 38
def autocorrect(node)
  method, _args, _body = *node
  method_source = method.loc.selector.source
  return if method_source == 'focus'

  range = Parser::Source::Range.new(node.source_range.source_buffer,
                                    method.loc.selector.begin_pos,
                                    method.loc.selector.end_pos)
  -> (corrector) do
    corrector.replace(range, method_source[1..-1])
  end
end
on_block(node) click to toggle source
# File lib/rubocop/cop/rspec/focused.rb, line 29
def on_block(node)
  method, _args, _body = *node
  _receiver, method_name, _object, *metadata = *method

  if FOCUSED_METHODS.include?(method_name) || focus_set_to_true?(metadata)
    add_offense(node, location: :expression, message: MESSAGE)
  end
end

Private Instance Methods

focus_set_to_true?(metadata) click to toggle source
# File lib/rubocop/cop/rspec/focused.rb, line 53
def focus_set_to_true?(metadata)
  return unless metadata

  metadata.include?(s(:sym, :focus)) || (
    metadata.last &&
    metadata.last.children.any? do |pair|
      pair == s(:pair, s(:sym, :focus), s(:true))
    end
  )
end