Create a gist now

Instantly share code, notes, and snippets.

a quick and dirty example of how to stub a method on an object
require 'singleton'
class BlockTest
def test
puts "this is the real method."
yield if block_given?
end
end
class Object
def stub_method(method)
Foo::Bar.instance.stub_it(self, method)
end
end
module Foo
class Bar
include Singleton
def stub_it(object, method)
object.instance_eval(<<-EOF, __FILE__, __LINE__)
def #{method}
puts "this is a stubbed method."
yield if block_given?
end
EOF
end
end
end
bt = BlockTest.new
bt.test { puts "and a block from the real method"}
bt.stub_method(:test)
bt.test { puts "and a block from the subbed method"}
# output is:
# => this is the real method.
# => and a block from the real method
# => this is a stubbed method.
# => and a block from the stubbed method
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment