Module: RSpec::Mocks::ExampleMethods
- Includes:
- ArgumentMatchers
- Defined in:
- lib/rspec/mocks/example_methods.rb
Overview
Contains methods intended to be used from within code examples. Mix this in to your test context (such as a test framework base class) to use rspec-mocks with your test framework. If you're using rspec-core, it'll take care of doing this for you.
Defined Under Namespace
Modules: ExpectHost
Instance Method Summary (collapse)
-
- (Object) allow
Used to wrap an object in preparation for stubbing a method on it.
-
- (Object) allow_any_instance_of
Used to wrap a class in preparation for stubbing a method on instances of it.
-
- (Object) allow_message_expectations_on_nil
Disables warning messages about expectations being set on nil.
-
- (Object) class_double(doubled_class, *args)
Constructs a test double against a specific class.
-
- (Object) class_spy(*args)
Constructs a test double that is optimized for use with
have_received
against a specific class. -
- (Double) double(*args)
Constructs an instance of RSpec::Mocks::Double configured with an optional name, used for reporting in failure messages, and an optional hash of message/return-value pairs.
-
- (Object) expect
Used to wrap an object in preparation for setting a mock expectation on it.
-
- (Object) expect_any_instance_of
Used to wrap a class in preparation for setting a mock expectation on instances of it.
-
- (Object) have_received(method_name, &block)
Verifies that the given object received the expected message during the course of the test.
-
- (Object) hide_const(constant_name)
Hides the named constant with the given value.
-
- (Object) instance_double(doubled_class, *args)
Constructs a test double against a specific class.
-
- (Object) instance_spy(*args)
Constructs a test double that is optimized for use with
have_received
against a specific class. -
- (Object) object_double(object_or_name, *args)
Constructs a test double against a specific object.
-
- (Object) object_spy(*args)
Constructs a test double that is optimized for use with
have_received
against a specific object. -
- (Object) receive
Used to specify a message that you expect or allow an object to receive.
-
- (Object) receive_message_chain
stubs/mocks a chain of messages on an object or test double.
-
- (Object) receive_messages
Shorthand syntax used to setup message(s), and their return value(s), that you expect or allow an object to receive.
-
- (Double) spy(*args)
Constructs a test double that is optimized for use with
have_received
. -
- (Object) stub_const(constant_name, value, options = {})
Stubs the named constant with the given value.
Methods included from ArgumentMatchers
#any_args, #anything, #array_including, #boolean, #duck_type, #hash_excluding, #hash_including, #instance_of, #kind_of, #no_args
Instance Method Details
- (Object) allow
If you disable the :expect
syntax this method will be undefined.
Used to wrap an object in preparation for stubbing a method on it.
|
# File 'lib/rspec/mocks/example_methods.rb', line 256
|
- (Object) allow_any_instance_of
This is only available when you have enabled the expect
syntax.
Used to wrap a class in preparation for stubbing a method on instances of it.
|
# File 'lib/rspec/mocks/example_methods.rb', line 276
|
- (Object) allow_message_expectations_on_nil
Disables warning messages about expectations being set on nil.
By default warning messages are issued when expectations are set on nil. This is to prevent false-positives and to catch potential bugs early on.
159 160 161 |
# File 'lib/rspec/mocks/example_methods.rb', line 159 def RSpec::Mocks.space.proxy_for(nil).warn_about_expectations = false end |
- (Object) class_double(doubled_class) - (Object) class_double(doubled_class, stubs)
Constructs a test double against a specific class. If the given class name has been loaded, only class methods defined on the class are allowed to be stubbed. In all other ways it behaves like a double.
66 67 68 69 |
# File 'lib/rspec/mocks/example_methods.rb', line 66 def class_double(doubled_class, *args) ref = ObjectReference.for(doubled_class) ExampleMethods.(ClassVerifyingDouble, ref, *args) end |
- (Object) class_spy(doubled_class) - (Object) class_spy(doubled_class, stubs)
Constructs a test double that is optimized for use with have_received
against a specific class. If the given class name has been loaded,
only class methods defined on the class are allowed to be stubbed.
With a normal double one has to stub methods in order to be able to spy
them. An class_spy automatically spies on all class methods to which the
class responds.
150 151 152 |
# File 'lib/rspec/mocks/example_methods.rb', line 150 def class_spy(*args) class_double(*args).as_null_object end |
- (Double) double - (Double) double(name) - (Double) double(stubs) - (Double) double(name, stubs)
Constructs an instance of RSpec::Mocks::Double configured with an optional name, used for reporting in failure messages, and an optional hash of message/return-value pairs.
35 36 37 |
# File 'lib/rspec/mocks/example_methods.rb', line 35 def double(*args) ExampleMethods.declare_double(Double, *args) end |
- (Object) expect
This method is usually provided by rspec-expectations. However,
if you use rspec-mocks without rspec-expectations, there's a definition
of it that is made available here. If you disable the :expect
syntax
this method will be undefined.
Used to wrap an object in preparation for setting a mock expectation on it.
|
# File 'lib/rspec/mocks/example_methods.rb', line 243
|
- (Object) expect_any_instance_of
If you disable the :expect
syntax this method will be undefined.
Used to wrap a class in preparation for setting a mock expectation on instances of it.
|
# File 'lib/rspec/mocks/example_methods.rb', line 266
|
- (Object) have_received(method_name, &block)
Verifies that the given object received the expected message during the course of the test. On a spy objects or as null object doubles this works for any method, on other objects the method must have been stubbed beforehand in order for messages to be verified.
Stubbing and verifying messages received in this way implements the Test Spy pattern.
239 240 241 |
# File 'lib/rspec/mocks/example_methods.rb', line 239 def have_received(method_name, &block) Matchers::HaveReceived.new(method_name, &block) end |
- (Object) hide_const(constant_name)
Hides the named constant with the given value. The constant will be undefined for the duration of the test.
Like method stubs, the constant will be restored to its original value when the example completes.
216 217 218 |
# File 'lib/rspec/mocks/example_methods.rb', line 216 def hide_const(constant_name) ConstantMutator.hide(constant_name) end |
- (Object) instance_double(doubled_class) - (Object) instance_double(doubled_class, stubs)
Constructs a test double against a specific class. If the given class name has been loaded, only instance methods defined on the class are allowed to be stubbed. In all other ways it behaves like a double.
50 51 52 53 |
# File 'lib/rspec/mocks/example_methods.rb', line 50 def instance_double(doubled_class, *args) ref = ObjectReference.for(doubled_class) ExampleMethods.(InstanceVerifyingDouble, ref, *args) end |
- (Object) instance_spy(doubled_class) - (Object) instance_spy(doubled_class, stubs)
Constructs a test double that is optimized for use with have_received
against a specific class. If the given class name has been loaded, only
instance methods defined on the class are allowed to be stubbed. With
a normal double one has to stub methods in order to be able to spy
them. An instance_spy automatically spies on all instance methods to
which the class responds.
117 118 119 |
# File 'lib/rspec/mocks/example_methods.rb', line 117 def instance_spy(*args) instance_double(*args).as_null_object end |
- (Object) object_double(object_or_name) - (Object) object_double(object_or_name, stubs)
Constructs a test double against a specific object. Only the methods the object responds to are allowed to be stubbed. If a String argument is provided, it is assumed to reference a constant object which is used for verification. In all other ways it behaves like a double.
82 83 84 85 |
# File 'lib/rspec/mocks/example_methods.rb', line 82 def object_double(object_or_name, *args) ref = ObjectReference.for(object_or_name, :allow_direct_object_refs) ExampleMethods.(ObjectVerifyingDouble, ref, *args) end |
- (Object) object_spy(object_or_name) - (Object) object_spy(object_or_name, stubs)
Constructs a test double that is optimized for use with have_received
against a specific object. Only instance methods defined on the object
are allowed to be stubbed. With a normal double one has to stub
methods in order to be able to spy them. An object_spy automatically
spies on all methods to which the object responds.
133 134 135 |
# File 'lib/rspec/mocks/example_methods.rb', line 133 def object_spy(*args) object_double(*args).as_null_object end |
- (Object) receive
If you disable the :expect
syntax this method will be undefined.
Used to specify a message that you expect or allow an object
to receive. The object returned by receive
supports the same
fluent interface that should_receive
and stub
have always
supported, allowing you to constrain the arguments or number of
times, and configure how the object should respond to the message.
|
# File 'lib/rspec/mocks/example_methods.rb', line 286
|
- (Object) receive_message_chain(method1, method2) - (Object) receive_message_chain("method1.method2") - (Object) receive_message_chain(method1, method_to_value_hash)
If you disable the :expect
syntax this method will be undefined.
stubs/mocks a chain of messages on an object or test double.
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 receive_message_chain
a code smell. Even though not all code smells
indicate real problems (think fluent interfaces), receive_message_chain
still
results in brittle examples. For example, if you write
allow(foo).to receive_message_chain(:bar, :baz => 37)
in a spec and then the
implementation calls foo.baz.bar
, the stub will not work.
|
# File 'lib/rspec/mocks/example_methods.rb', line 313
|
- (Object) receive_messages
If you disable the :expect
syntax this method will be undefined.
Shorthand syntax used to setup message(s), and their return value(s),
that you expect or allow an object to receive. The method takes a hash
of messages and their respective return values. Unlike with receive
,
you cannot apply further customizations using a block or the fluent
interface.
|
# File 'lib/rspec/mocks/example_methods.rb', line 299
|
- (Double) spy - (Double) spy(name) - (Double) spy(stubs) - (Double) spy(name, stubs)
Constructs a test double that is optimized for use with
have_received
. With a normal double one has to stub methods in order
to be able to spy them. A spy automatically spies on all methods.
100 101 102 |
# File 'lib/rspec/mocks/example_methods.rb', line 100 def spy(*args) double(*args).as_null_object end |
- (Object) stub_const(constant_name, value, options = {})
Stubs the named constant with the given value. Like method stubs, the constant will be restored to its original value (or lack of one, if it was undefined) when the example completes.
200 201 202 |
# File 'lib/rspec/mocks/example_methods.rb', line 200 def stub_const(constant_name, value, ={}) ConstantMutator.stub(constant_name, value, ) end |