Skip to content

Instantly share code, notes, and snippets.

@jferris
Created June 23, 2009 15:13
Show Gist options
  • Save jferris/134582 to your computer and use it in GitHub Desktop.
Save jferris/134582 to your computer and use it in GitHub Desktop.
should_delegate
class Test::Unit::TestCase
# call-seq:
# should_delegate(method, :to => member)
#
# Generates a test asserting that +method+ returns the value of that method
# on +member+.
#
# Example:
# should_deleate :full_name, :to => :user
def self.should_delegate(method, opts)
member = opts.delete(:to) or raise "Need a :to"
klass = model_class
should "delegate #{method} to #{member}" do
assert_delegates klass.new, method, :to => member
end
end
# call-seq:
# assert_delgates(delegator, method, :to => member)
#
# Asserts that invoking +method+ on +delegator+ returns the value of that
# method on +member+.
#
# Example:
# assert_delegates post, :full_name, :to => :user
def assert_delegates(delegator, method, opts)
member = opts.delete(:to) or raise "Need a :to"
expected = 'a value'
delegatee = stub(member.to_s, method => expected)
delegator.stubs(member => delegatee)
actual = delegator.send(method)
assert_received(delegatee, method) {|expect| expect.with.once }
assert_equal expected, actual
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment