ブロックの実装
ブロックを渡すと、RSpecはそのブロックをメソッドの実装として使用します。呼び出し元が提供した引数(またはブロック)は、ブロックの実装によってイールドされます。この機能は非常に柔軟であり、より宣言的なフルエントインターフェースでは直接サポートされていない多くのユースケースをサポートしています。
フルエントインターフェースのメソッドには、いずれのメソッドにもブロックを渡すことができます。
allow(dbl).to receive(:foo) { do_something }
allow(dbl).to receive(:foo).with("args") { do_something }
allow(dbl).to receive(:foo).once { do_something }
allow(dbl).to receive(:foo).ordered { do_something }
ブロックの実装の一部の一般的なユースケースを以下に示しますが、これは網羅的なリストではありません。
簡潔な構文で戻り値を指定するためにブロックを使用する
「return_value_spec.rb」という名前のファイルがある場合、以下のようになります。
RSpec.describe "Specifying a return value using a block" do
it "returns the block's return value" do
dbl = double
allow(dbl).to receive(:foo) { 14 }
expect(dbl.foo).to eq(14)
end
end
「rspec return_value_spec.rb」と実行すると、すべての例がパスするはずです。