class RuboCop::Cop::RSpec::MessageSpies
expect(foo).to receive(:bar)
# good
expect(foo).to have_received(:bar)
# bad
@example ‘EnforcedStyle: receive`
expect(foo).to have_received(:bar)
# good
expect(foo).to receive(:bar)
# bad
@example `EnforcedStyle: have_received`
`EnforcedStyle` option and supports `–auto-gen-config`.
This cop can be configured in your configuration using the
Checks that message expectations are set using spies.
def error_message(receiver)
def error_message(receiver) case style when :receive MSG_RECEIVE when :have_received format(MSG_HAVE_RECEIVED, source: receiver.source) end end
def on_send(node)
def on_send(node) receive_message_matcher(node) do |receiver, message_matcher| return correct_style_detected if preferred_style?(message_matcher) add_offense( message_matcher, location: :selector, message: error_message(receiver) ) { opposite_style_detected } end end
def preferred_style?(expectation)
def preferred_style?(expectation) expectation.method_name.equal?(style) end
def receive_message_matcher(node)
def receive_message_matcher(node) return unless (receiver = message_expectation(node)) receive_message(node) { |match| yield(receiver, match) } end