Class: RSpec::Mocks::VerifyingMessageExpectation Private
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
MessageExpectation
|
|
Instance Chain:
|
|
Inherits: |
RSpec::Mocks::MessageExpectation
|
Defined in: | rspec-mocks/lib/rspec/mocks/verifying_message_expectation.rb |
Overview
A message expectation that knows about the real implementation of the message being expected, so that it can verify that any expectations have the valid arguments.
Class Method Summary
- .new(*args) ⇒ VerifyingMessageExpectation constructor Internal use only
Instance Attribute Summary
-
#method_reference
rw
Internal use only
A level of indirection is used here rather than just passing in the method itself, since method look up is expensive and we only want to do it if actually needed.
MessageExpectation::ImplementationDetails
- Included
Instance Method Summary
- #with(*args, &block) Internal use only
- #validate_expected_arguments! private Internal use only
MessageExpectation
- Inherited
#and_call_original | Tells the object to delegate to the original unmodified method when it receives the message. |
#and_invoke | Tells the object to invoke a Proc when it receives the message. |
#and_raise | Tells the object to raise an exception when the message is received. |
#and_return | Tells the object to return a value when it receives the message. |
#and_throw | Tells the object to throw a symbol (with the object if that form is used) when the message is received. |
#and_wrap_original | Decorates the stubbed method with the supplied block. |
#and_yield | Tells the object to yield one or more args to a block when the message is received. |
#at_least | Constrain a message expectation to be received at least a specific number of times. |
#at_most | Constrain a message expectation to be received at most a specific number of times. |
#exactly | Constrain a message expectation to be received a specific number of times. |
#inspect | Alias for MessageExpectation#to_s. |
#never | Expect a message not to be received at all. |
#once | Expect a message to be received exactly one time. |
#ordered | Expect messages to be received in a specific order. |
#thrice | Expect a message to be received exactly three times. |
#time | Alias for MessageExpectation#times. |
#times | Syntactic sugar for |
#to_s, | |
#twice | Expect a message to be received exactly two times. |
#with | Constrains a stub or message expectation to invocations with specific arguments. |
MessageExpectation::ImplementationDetails
- Included
Instance Attribute Details
#method_reference (rw)
A level of indirection is used here rather than just passing in the method itself, since method look up is expensive and we only want to do it if actually needed.
Conceptually the method reference makes more sense as a constructor argument since it should be immutable, but it is significantly more straight forward to build the object in pieces so for now it stays as an accessor.
# File 'rspec-mocks/lib/rspec/mocks/verifying_message_expectation.rb', line 18
attr_accessor :method_reference
Instance Method Details
#validate_expected_arguments! (private)
[ GitHub ]# File 'rspec-mocks/lib/rspec/mocks/verifying_message_expectation.rb', line 38
def validate_expected_arguments! return if method_reference.nil? method_reference.with_signature do |signature| args = yield signature verifier = Support::LooseSignatureVerifier.new(signature, args) unless verifier.valid? # Fail fast is required, otherwise the message expectation will fail # as well ("expected method not called") and clobber this one. @failed_fast = true @error_generator.raise_invalid_arguments_error(verifier) end end end
#with(*args, &block)
[ GitHub ]# File 'rspec-mocks/lib/rspec/mocks/verifying_message_expectation.rb', line 25
def with(*args, &block) super(*args, &block).tap do validate_expected_arguments! do |signature| example_call_site_args = [:an_arg] * signature.min_non_kw_args example_call_site_args << :kw_args_hash if signature.required_kw_args.any? @argument_list_matcher.resolve_expected_args_based_on(example_call_site_args) end end end