Method: MiniSpec::InstanceAPI#stub

Defined in:
lib/minispec/api/instance/mocks/stubs.rb

#stub(object, stub, visibility = nil, &proc) ⇒ Object

stubbing given method and keeps original visibility

if a block given, it will receive original method as first argument and any passed parameters as rest arguments.

Examples:

make Some::Remote::API.call to return success

stub(Some::Remote::API, :call) { :success }

call original

stub(obj, :a) {|orig| orig.call}

Parameters:

  • object

    object to define stub on

  • stub

    method to be stubbed. if a Hash given, keys will be stubbed methods and values return values

  • &proc (Proc)

    block to be yielded when stub called

Returns:

  • MiniSpec::Mocks::Stub instance



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/minispec/api/instance/mocks/stubs.rb', line 21

def stub object, stub, visibility = nil, &proc
  [Symbol, String, Hash].include?(stub.class) ||
    raise(ArgumentError, 'a Symbol, String or Hash expected')

  if stub.is_a?(Hash)
    return hash_stub(object, stub, visibility, &proc)
  elsif stub =~ /\./
    return chained_stub(object, stub, visibility, &proc)
  end

  visibility ||= MiniSpec::Utils.method_visibility(object, stub) || :public
  stubs = (@__ms__stubs[object.__id__] ||= {})
  stubs[stub] ||= MiniSpec::Mocks::Stub.new(object, @__ms__messages, @__ms__stubs__originals)
  stubs[stub].stubify(stub, visibility, &proc)
  stubs[stub]
end