スパイ
メッセージの期待値は、コードの実行前に例の期待値を設定します。多くの開発者は、テストの構造化にはarrange-act-assert(またはgiven-when-then)パターンを使用することを好みます。スパイは、このパターンをサポートする別のタイプのテストダブルであり、後からメッセージが受信されたことを期待することができます。これは、have_received
を使用して行います。
スパイとして任意のテストダブル(または部分的なダブル)を使用することができますが、ダブルは気になるメッセージをスパイするようにセットアップする必要があります。スパイは自動的にすべてのメッセージをスパイしますが、メッセージを許可することもできます。
have_received
は、通常のメッセージの期待値と同じ流暢なインターフェースをサポートしています。
注意:ここで示されているhave_received
のAPIは、rspec-expectationsを使用している場合にのみ機能します。
注意:スパイが受信したメッセージの記録後に引数が変更されると、have_received(...).with(...)
は正しく機能しません。
スパイの使用方法
次の内容で「spy_spec.rb」という名前のファイルを作成します。
RSpec.describe "have_received" do
it "passes when the message has been received" do
invitation = spy('invitation')
invitation.deliver
expect(invitation).to have_received(:deliver)
end
end