class RuboCop::Cop::RSpec::StubbedMock


expect(foo).to receive(:bar).with(42)
allow(foo).to receive(:bar).with(42).and_return(“hello world”)
# good (without spies)
expect(foo).to receive(:bar).with(42).and_return(“hello world”)
# bad
@example
Checks that message expectations do not have a configured response.

def msg(method_name)

def msg(method_name)
  format(
    MSG,
    method_name: method_name,
    replacement: replacement(method_name)
  )
end

def on_expectation(expectation, method_name, matcher)

def on_expectation(expectation, method_name, matcher)
  flag_expectation = lambda do
    add_offense(expectation, message: msg(method_name))
  end
  matcher_with_configured_response(matcher, &flag_expectation)
  matcher_with_return_block(matcher, &flag_expectation)
  matcher_with_hash(matcher, &flag_expectation)
  matcher_with_blockpass(matcher, &flag_expectation)
end

def on_send(node)

def on_send(node)
  expectation(node) do |expectation, method_name, matcher|
    on_expectation(expectation, method_name, matcher)
  end
end

def replacement(method_name)

def replacement(method_name)
  case method_name
  when :expect
    '`allow`'
  when :is_expected
    '`allow(subject)`'
  when :expect_any_instance_of
    '`allow_any_instance_of`'
  else
    'an allow statement'
  end
end