class Object

Object extensions for Minitest::Mock.

Public Instance Methods

Source
# File lib/minitest/mock.rb, line 298
def stub name, val_or_callable, *block_args, **block_kwargs, &block
 new_name = "__minitest_stub__#{name}"
 metaclass = class << self; self; end
 if respond_to? name and not methods.map(&:to_s).include? name.to_s then
 metaclass.send :define_method, name do |*args, **kwargs|
 super(*args, **kwargs)
 end
 end
 metaclass.send :alias_method, new_name, name
 if ENV["MT_KWARGS_HAC\K"] then
 metaclass.send :define_method, name do |*args, &blk|
 if val_or_callable.respond_to? :call then
 val_or_callable.call(*args, &blk)
 else
 blk.call(*block_args, **block_kwargs) if blk
 val_or_callable
 end
 end
 else
 metaclass.send :define_method, name do |*args, **kwargs, &blk|
 if val_or_callable.respond_to? :call then
 if kwargs.empty? then # FIX: drop this after 2.7 dead
 val_or_callable.call(*args, &blk)
 else
 val_or_callable.call(*args, **kwargs, &blk)
 end
 else
 if blk then
 if block_kwargs.empty? then # FIX: drop this after 2.7 dead
 blk.call(*block_args)
 else
 blk.call(*block_args, **block_kwargs)
 end
 end
 val_or_callable
 end
 end
 end
 block[self]
ensure
 metaclass.send :undef_method, name
 metaclass.send :alias_method, name, new_name
 metaclass.send :undef_method, new_name
end

Add a temporary stubbed method replacing name for the duration of the block. If val_or_callable responds to call, then it returns the result of calling it, otherwise returns the value as-is. If stubbed method yields a block, block_args will be passed along. Cleans up the stub at the end of the block. The method name must exist before stubbing.

def test_stale_eh
 obj_under_test = Something.new
 refute obj_under_test.stale?
 Time.stub :now, Time.at(0) do
 assert obj_under_test.stale?
 end
end
Calls superclass method