module RSpec::Mocks::Methods

Methods that are added to every object.

Public Instance Methods

as_null_object() click to toggle source

Tells the object to respond to all messages. If specific stub values are declared, they'll work as expected. If not, the receiver is returned.

# File lib/rspec/mocks/methods.rb, line 99
def as_null_object
  @_null_object = true
  __mock_proxy.as_null_object
end
null_object?() click to toggle source

Returns true if this object has received `#as_null_object`

# File lib/rspec/mocks/methods.rb, line 105
def null_object?
  defined?(@_null_object)
end
received_message?(message, *args, &block) click to toggle source

@private

# File lib/rspec/mocks/methods.rb, line 110
def received_message?(message, *args, &block)
  __mock_proxy.received_message?(message, *args, &block)
end
rspec_reset() click to toggle source

@private

# File lib/rspec/mocks/methods.rb, line 120
def rspec_reset
  __mock_proxy.reset
end
rspec_verify() click to toggle source

@private

# File lib/rspec/mocks/methods.rb, line 115
def rspec_verify
  __mock_proxy.verify
end
should_not_receive(message, &block) click to toggle source

Sets and expectation that this object should not receive a message during this example.

# File lib/rspec/mocks/methods.rb, line 20
def should_not_receive(message, &block)
  __mock_proxy.add_negative_message_expectation(caller(1)[0], message.to_sym, &block)
end
should_receive(message, opts={}, &block) click to toggle source

Sets and expectation that this object should receive a message before the end of the example.

@example

logger = double('logger')
thing_that_logs = ThingThatLogs.new(logger)
logger.should_receive(:log)
thing_that_logs.do_something_that_logs_a_message
# File lib/rspec/mocks/methods.rb, line 14
def should_receive(message, opts={}, &block)
  __mock_proxy.add_message_expectation(opts[:expected_from] || caller(1)[0], message.to_sym, opts, &block)
end
stub(message_or_hash, opts={}, &block) click to toggle source

Tells the object to respond to the message with the specified value.

@example

counter.stub(:count).and_return(37)
counter.stub(:count => 37)
counter.stub(:count) { 37 }
# File lib/rspec/mocks/methods.rb, line 31
def stub(message_or_hash, opts={}, &block)
  if Hash === message_or_hash
    message_or_hash.each {|message, value| stub(message).and_return value }
  else
    __mock_proxy.add_stub(caller(1)[0], message_or_hash.to_sym, opts, &block)
  end
end
Also aliased as: stub!
stub!(message_or_hash, opts={}, &block) click to toggle source
Alias for: stub
stub_chain(*chain, &blk) click to toggle source

@overload #stub_chain(method1, method2) @overload #stub_chain("method1.method2") @overload #stub_chain(method1, method_to_value_hash)

Stubs a chain of methods.

## Warning:

Chains can be arbitrarily long, which makes it quite painless to violate the Law of Demeter in violent ways, so you should consider any use of `#stub_chain` a code smell. Even though not all code smells indicate real problems (think fluent interfaces), `#stub_chain` still results in brittle examples. For example, if you write `foo.stub_chain(:bar, :baz => 37)` in a spec and then the implementation calls `foo.baz.bar`, the stub will not work.

@example

double.stub_chain("foo.bar") { :baz }
double.stub_chain(:foo, :bar => :baz)
double.stub_chain(:foo, :bar) { :baz }

# Given any of ^^ these three forms ^^:
double.foo.bar # => :baz

# Common use in Rails/ActiveRecord:
Article.stub_chain("recent.published") { [Article.new] }
# File lib/rspec/mocks/methods.rb, line 80
def stub_chain(*chain, &blk)
  chain, blk = format_chain(*chain, &blk)
  if chain.length > 1
    if matching_stub = __mock_proxy.__send__(:find_matching_method_stub, chain[0].to_sym)
      chain.shift
      matching_stub.invoke.stub_chain(*chain, &blk)
    else
      next_in_chain = Object.new
      stub(chain.shift) { next_in_chain }
      next_in_chain.stub_chain(*chain, &blk)
    end
  else
    stub(chain.shift, &blk)
  end
end
unstub(message) click to toggle source

Removes a stub. On a double, the object will no longer respond to `message`. On a real object, the original method (if it exists) is restored.

This is rarely used, but can be useful when a stub is set up during a shared `before` hook for the common case, but you want to replace it for a special case.

# File lib/rspec/mocks/methods.rb, line 46
def unstub(message)
  __mock_proxy.remove_stub(message)
end
Also aliased as: unstub!
unstub!(message) click to toggle source
Alias for: unstub