class RuboCop::Cop::RSpec::InstanceSpy

Checks for `instance_double` used with `have_received`.

@example

# bad
it do
  foo = instance_double(Foo).as_null_object
  expect(foo).to have_received(:bar)
end

# good
it do
  foo = instance_spy(Foo)
  expect(foo).to have_received(:bar)
end

Constants

MSG

Public Instance Methods

on_block(node) click to toggle source
# File lib/rubocop/cop/rspec/instance_spy.rb, line 45
def on_block(node)
  return unless example?(node)

  null_double(node) do |var, receiver|
    have_received_usage(node) do |expected|
      next if expected != var

      add_offense(receiver) do |corrector|
        autocorrect(corrector, receiver)
      end
    end
  end
end

Private Instance Methods

autocorrect(corrector, node) click to toggle source
# File lib/rubocop/cop/rspec/instance_spy.rb, line 61
def autocorrect(corrector, node)
  replacement = 'instance_spy'
  corrector.replace(node.loc.selector, replacement)

  double_source_map = node.parent.loc
  as_null_object_range = double_source_map
    .dot
    .join(double_source_map.selector)
  corrector.remove(as_null_object_range)
end