module AssertSend

Constants

ExpectationError

Public Instance Methods

assert_send(object, message) { || ... } click to toggle source
# File lib/assert_send.rb, line 4
def assert_send(object, message, &block)
  metaclass = object.singleton_class
  original = object.method(message)
  executed = nil

  metaclass.send(:define_method, message) do |*args|
    executed = true
    original.(*args)
  end

  res = yield

  executed ? res : (raise ExpectationError, "Expected #{object} to receive message :#{message}")
ensure
  metaclass.send(:undef_method, message)
  metaclass.send(:define_method, message, original)
end