したがって、複数の値を返す実際の作業は、クラスの次のメソッドにあります。RSpec::Mocks::MessageExpectation
def call_implementation_consecutive(*args, &block)
@value ||= call_implementation(*args, &block)
@value[[@actual_received_count, @value.size-1].min]
end
基本的に、call_implementation
に渡した予想される戻り値のリストを返し、and_return
このメソッドは現在の呼び出しに対応するものを選択します (リスト内の値よりも多くの回数メソッドを呼び出すと、最後の値が返されます)。
したがって、目的を達成するには、次のようにこのメソッドにモンキー パッチを適用できます。
class RSpec::Mocks::MessageExpectation
alias_method :old_call_implementation_consecutive, :call_implementation_consecutive
def call_implementation_consecutive(*args, &block)
old_call_implementation_consecutive(*args, &block).tap do |value|
raise value if value.is_a?(Class) && value < Exception
end
end
end