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

値の返却

and_return を使用して返却値を指定します。連続した呼び出しに対して異なる返却値を指定するために、and_return に複数の値を渡すことができます。メッセージが追加の回数受け取られる場合でも、最後の値が返却され続けます。

注意 - allow_any_instance_of からのレスポンスを設定するためのドキュメントをお探しの場合は、レガシーコードとの作業 のドキュメントを参照してください。

デフォルトでは nil が返却されます

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

RSpec.describe "The default response" do
it "returns nil when no response has been configured" do
dbl = double
allow(dbl).to receive(:foo)
expect(dbl.foo).to be_nil
end
end

rspec returns_nil_spec.rb を実行すると、

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

返却値を指定する

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

RSpec.describe "Specifying a return value" do
it "returns the specified return value" do
dbl = double
allow(dbl).to receive(:foo).and_return(14)
expect(dbl.foo).to eq(14)
end
end

rspec and_return_spec.rb を実行すると、

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

複数の呼び出しに対して異なる返却値を指定する

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

RSpec.describe "When the method is called multiple times" do
it "returns the specified values in order, then keeps returning the last value" do
dbl = double
allow(dbl).to receive(:foo).and_return(1, 2, 3)

expect(dbl.foo).to eq(1)
expect(dbl.foo).to eq(2)
expect(dbl.foo).to eq(3)
expect(dbl.foo).to eq(3) # begins to repeat last value
expect(dbl.foo).to eq(3)
end
end

rspec multiple_calls_spec.rb を実行すると、

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