Class: Mocha::Expectation
- Inherits:
-
Object
- Object
- Mocha::Expectation
- Defined in:
- lib/mocha/expectation.rb
Overview
Methods on expectations returned from Mock#expects, Mock#stubs, ObjectMethods#expects and ObjectMethods#stubs.
Instance Method Summary collapse
-
#at_least(minimum_number_of_times) ⇒ Expectation
Modifies expectation so that the expected method must be called at least a
minimum_number_of_times. -
#at_least_once ⇒ Expectation
Modifies expectation so that the expected method must be called at least once.
-
#at_most(maximum_number_of_times) ⇒ Expectation
Modifies expectation so that the expected method must be called at most a
maximum_number_of_times. -
#at_most_once ⇒ Expectation
Modifies expectation so that the expected method must be called at most once.
-
#in_sequence(sequence, *sequences) ⇒ Expectation
Constrains the expectation so that it must be invoked at the current point in the
sequence. -
#multiple_yields(*parameter_groups) ⇒ Expectation
Modifies expectation so that when the expected method is called, it yields multiple times per invocation with the specified
parameter_groups. -
#never ⇒ Expectation
Modifies expectation so that the expected method must never be called.
-
#once ⇒ Expectation
Modifies expectation so that the expected method must be called exactly once.
-
#raises(exception = RuntimeError, message = nil) ⇒ Expectation
Modifies expectation so that when the expected method is called, it raises the specified
exceptionwith the specifiedmessagei.e. -
#returns(*values) ⇒ Expectation
Modifies expectation so that when the expected method is called, it returns the specified
value. -
#then(state = nil) ⇒ Expectation
The same expectation, thereby allowing invocations of other Expectation methods to be chained.
-
#thrice ⇒ Expectation
Modifies expectation so that the expected method must be called exactly three times.
-
#throws(tag, object = nil) ⇒ Expectation
Modifies expectation so that when the expected method is called, it throws the specified
tagwith the specific return valueobjecti.e. -
#times(range_or_number) ⇒ Expectation
Modifies expectation so that the number of invocations of the expected method must be within a specified range or exactly equal to a specified number.
-
#twice ⇒ Expectation
Modifies expectation so that the expected method must be called exactly twice.
-
#when(state_predicate) ⇒ Expectation
Constrains the expectation to occur only when the
state_machineis in the state specified bystate_predicate. -
#with(*expected_parameters_or_matchers) {|actual_parameters| ... } ⇒ Expectation
Modifies expectation so that the expected method must be called with
expected_parameters_or_matchers. -
#with_block_given ⇒ Expectation
Modifies expectation so that the expected method must be called with a block.
-
#with_no_block_given ⇒ Expectation
Modifies expectation so that the expected method must be called without a block.
-
#yields(*parameters) ⇒ Expectation
Modifies expectation so that when the expected method is called, it yields to the block with the specified
parameters.
Instance Method Details
#at_least(minimum_number_of_times) ⇒ Expectation
Modifies expectation so that the expected method must be called at least a minimum_number_of_times.
164 165 166 167 |
# File 'lib/mocha/expectation.rb', line 164 def at_least(minimum_number_of_times) @cardinality.at_least(minimum_number_of_times) self end |
#at_least_once ⇒ Expectation
Modifies expectation so that the expected method must be called at least once. This is equivalent to calling #at_least with an argument of 1.
182 183 184 |
# File 'lib/mocha/expectation.rb', line 182 def at_least_once at_least(1) end |
#at_most(maximum_number_of_times) ⇒ Expectation
Modifies expectation so that the expected method must be called at most a maximum_number_of_times.
200 201 202 203 |
# File 'lib/mocha/expectation.rb', line 200 def at_most(maximum_number_of_times) @cardinality.at_most(maximum_number_of_times) self end |
#at_most_once ⇒ Expectation
Modifies expectation so that the expected method must be called at most once. This is equivalent to calling #at_most with an argument of 1.
218 219 220 |
# File 'lib/mocha/expectation.rb', line 218 def at_most_once at_most(1) end |
#in_sequence(sequence, *sequences) ⇒ Expectation
Constrains the expectation so that it must be invoked at the current point in the sequence.
To expect a sequence of invocations, write the expectations in order and add the in_sequence(sequence) clause to each one.
Expectations in a sequence can have any invocation count.
If an expectation in a sequence is stubbed, rather than expected, it can be skipped in the sequence.
An expected method can appear in multiple sequences.
643 644 645 646 |
# File 'lib/mocha/expectation.rb', line 643 def in_sequence(sequence, *sequences) sequences.unshift(sequence).each { |seq| add_in_sequence_ordering_constraint(seq) } self end |
#multiple_yields(*parameter_groups) ⇒ Expectation
Modifies expectation so that when the expected method is called, it yields multiple times per invocation with the specified parameter_groups.
If no block is provided, the method will still attempt to yield resulting in a LocalJumpError. Note that this is what would happen if a “real” (non-mock) method implementation tried to yield to a non-existent block.
430 431 432 433 |
# File 'lib/mocha/expectation.rb', line 430 def multiple_yields(*parameter_groups) @yield_parameters.add(*parameter_groups) self end |
#never ⇒ Expectation
Modifies expectation so that the expected method must never be called.
144 145 146 147 |
# File 'lib/mocha/expectation.rb', line 144 def never @cardinality.exactly(0) self end |
#once ⇒ Expectation
Modifies expectation so that the expected method must be called exactly once. This is equivalent to calling #times with an argument of 1.
Note that this is the default behaviour for an expectation, but you may wish to use it for clarity/emphasis.
127 128 129 130 |
# File 'lib/mocha/expectation.rb', line 127 def once @cardinality.exactly(1) self end |
#raises ⇒ Expectation #raises(exception) ⇒ Expectation #raises(exception, message) ⇒ Expectation
Modifies expectation so that when the expected method is called, it raises the specified exception with the specified message i.e. calls Kernel#raise(exception, message).
517 518 519 520 |
# File 'lib/mocha/expectation.rb', line 517 def raises(exception = RuntimeError, = nil) @return_values += ReturnValues.new(ExceptionRaiser.new(exception, )) self end |
#returns(value) ⇒ Expectation #returns(*values) ⇒ Expectation
Modifies expectation so that when the expected method is called, it returns the specified value.
477 478 479 480 |
# File 'lib/mocha/expectation.rb', line 477 def returns(*values) @return_values += ReturnValues.build(*values) self end |
#then ⇒ Expectation #then(state) ⇒ Expectation
Returns the same expectation, thereby allowing invocations of other Mocha::Expectation methods to be chained.
591 592 593 594 |
# File 'lib/mocha/expectation.rb', line 591 def then(state = nil) add_side_effect(ChangeStateSideEffect.new(state)) if state self end |
#thrice ⇒ Expectation
Modifies expectation so that the expected method must be called exactly three times. This is equivalent to calling #times with an argument of 3.
76 77 78 79 |
# File 'lib/mocha/expectation.rb', line 76 def thrice @cardinality.exactly(3) self end |
#throw(tag) ⇒ Expectation #throw(tag, object) ⇒ Expectation
Modifies expectation so that when the expected method is called, it throws the specified tag with the specific return value object i.e. calls Kernel#throw(tag, object).
556 557 558 559 |
# File 'lib/mocha/expectation.rb', line 556 def throws(tag, object = nil) @return_values += ReturnValues.new(Thrower.new(tag, object)) self end |
#times(range_or_number) ⇒ Expectation
Modifies expectation so that the number of invocations of the expected method must be within a specified range or exactly equal to a specified number.
47 48 49 50 |
# File 'lib/mocha/expectation.rb', line 47 def times(range_or_number) @cardinality.times(range_or_number) self end |
#twice ⇒ Expectation
Modifies expectation so that the expected method must be called exactly twice. This is equivalent to calling #times with an argument of 2.
102 103 104 105 |
# File 'lib/mocha/expectation.rb', line 102 def twice @cardinality.exactly(2) self end |
#when(state_predicate) ⇒ Expectation
Constrains the expectation to occur only when the state_machine is in the state specified by state_predicate.
615 616 617 618 |
# File 'lib/mocha/expectation.rb', line 615 def when(state_predicate) add_ordering_constraint(InStateOrderingConstraint.new(state_predicate)) self end |
#with(*expected_parameters_or_matchers) {|actual_parameters| ... } ⇒ Expectation
Modifies expectation so that the expected method must be called with expected_parameters_or_matchers.
May be used with Ruby literals or variables for exact matching or with parameter matchers for less-specific matching, e.g. ParameterMatchers#includes, ParameterMatchers#has_key, etc. See ParameterMatchers for a list of all available parameter matchers.
Alternatively a block argument can be passed to #with to implement custom parameter matching. The block receives the *actual_parameters as its arguments and should return true if they are acceptable or false otherwise. See the example below where a method is expected to be called with a value divisible by 4. The block argument takes precedence over expected_parameters_or_matchers. The block may be called multiple times per invocation of the expected method and so it should be idempotent.
Note that if #with is called multiple times on the same expectation, the last call takes precedence; other calls are ignored.
Positional arguments were separated from keyword arguments in Ruby v3 (see this article). In relation to this a new configuration option (Configuration#strict_keyword_argument_matching=) is available in Ruby >= 2.7.
When Configuration#strict_keyword_argument_matching= is set to false (which is the default in Ruby v2.7), a positional Hash and a set of keyword arguments passed to #with are treated the same for the purposes of parameter matching. However, a deprecation warning will be displayed if a positional Hash matches a set of keyword arguments or vice versa.
When Configuration#strict_keyword_argument_matching= is set to true (which is the default in Ruby >= v3.0), an actual positional Hash will not match an expected set of keyword arguments; and vice versa, an actual set of keyword arguments will not match an expected positional Hash, i.e. the parameter matching is stricter.
324 325 326 327 |
# File 'lib/mocha/expectation.rb', line 324 def with(*expected_parameters_or_matchers, &matching_block) @parameters_matcher = ParametersMatcher.new(expected_parameters_or_matchers, self, &matching_block) self end |
#with_block_given ⇒ Expectation
Modifies expectation so that the expected method must be called with a block.
344 345 346 347 |
# File 'lib/mocha/expectation.rb', line 344 def with_block_given @block_matcher = BlockMatchers::BlockGiven.new self end |
#with_no_block_given ⇒ Expectation
Modifies expectation so that the expected method must be called without a block.
363 364 365 366 |
# File 'lib/mocha/expectation.rb', line 363 def with_no_block_given @block_matcher = BlockMatchers::NoBlockGiven.new self end |
#yields(*parameters) ⇒ Expectation
Modifies expectation so that when the expected method is called, it yields to the block with the specified parameters.
If no parameters are specified, it yields to the block without any parameters.
If no block is provided, the method will still attempt to yield resulting in a LocalJumpError. Note that this is what would happen if a “real” (non-mock) method implementation tried to yield to a non-existent block.
May be called multiple times on the same expectation for consecutive invocations.
402 403 404 |
# File 'lib/mocha/expectation.rb', line 402 def yields(*parameters) multiple_yields(parameters) end |