メインコンテンツまでスキップ

ミックスレスポンス

and_invokeを使用して、メッセージが受信されたときに呼び出し可能オブジェクトを呼び出します。複数の呼び出し可能オブジェクトをand_invokeに渡すことで、連続した呼び出しに対して異なる動作をするようにします。メッセージが追加で受信された場合、最後の呼び出し可能オブジェクトは引き続き呼び出されます。

注意: 呼び出される呼び出し可能オブジェクトは、呼び出しの引数とともに呼び出されます。そのため、メソッドと同じ引数のlambdaや同様のものを使用することをおすすめしますが、引数の数に関係ない場合はprocを使用することもできます(例: 例外を発生させる場合)。

ミックスレスポンス

次の内容で「raises_and_then_returns.rb」という名前のファイルがあるとします:

RSpec.describe "when the method is called multiple times" do
it "raises and then later returns a value" do
dbl = double
allow(dbl).to receive(:foo).and_invoke(lambda { raise "failure" }, lambda { true })

expect { dbl.foo }.to raise_error("failure")
expect(dbl.foo).to eq(true)
end
end

「rspec raises_and_then_returns.rb」と実行した場合、

例はすべてパスするはずです。