Module | RSpec::Mocks::Methods |
In: |
lib/rspec/mocks/methods.rb
|
Methods that are added to every object.
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.
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
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 }
@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] }
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.