Class: Object

Inherits:
BasicObject
Includes:
Minitest::Expectations
Defined in:
lib/minitest/mock.rb,
lib/minitest/spec.rb

Overview

:nodoc:

Instance Method Summary collapse

Methods included from Minitest::Expectations

#assert_empty, #assert_equal, #assert_in_delta, #assert_in_epsilon, #assert_includes, #assert_instance_of, #assert_kind_of, #assert_match, #assert_nil, #assert_operator, #assert_output, #assert_path_exists, #assert_raises, #assert_respond_to, #assert_same, #assert_silent, #assert_throws, #refute_empty, #refute_equal, #refute_in_delta, #refute_in_epsilon, #refute_includes, #refute_instance_of, #refute_kind_of, #refute_match, #refute_nil, #refute_operator, #refute_path_exists, #refute_respond_to, #refute_same

Instance Method Details

#stub(name, val_or_callable, *block_args, **block_kwargs) ⇒ Object

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

– NOTE: keyword args in callables are NOT checked for correctness against the existing method. Too many edge cases to be worth it.



253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
# File 'lib/minitest/mock.rb', line 253

def stub name, val_or_callable, *block_args, **block_kwargs
  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

  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

  yield self
ensure
  metaclass.send :undef_method, name
  metaclass.send :alias_method, name, new_name
  metaclass.send :undef_method, new_name
end