class Object - minitest: Ruby Standard Library Documentation

# class Object

`Object` extensions for `Minitest::Mock`.

### Public Instance Methods

stub(name, val_or_callable, *block_args, **block_kwargs, &block) click to toggle source

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

    # File minitest-5.25.4/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