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

テストダブル

テストダブル は、テスト中に実際のオブジェクトの代わりに使用される汎用的な用語です(スタントダブルのようなものです)。double メソッドを使用して作成します。ダブルはデフォルトで「厳格」です。許可されていないメッセージや予期していないメッセージがあるとエラーが発生しますが、ダブルを「緩い」状態に切り替えることもできます。ダブルを作成する際には、ハッシュを渡すことでメッセージを許可し(およびその戻り値を設定する)ことができます。

テストダブルを作成したら、それに対してメッセージを許可したり、期待したりすることができます。

可能な限り、検証ダブルの使用をお勧めします。

ダブルはデフォルトで厳格です

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

RSpec.describe "A test double" do
it "raises errors when messages not allowed or expected are received" do
dbl = double("Some Collaborator")
dbl.foo
end
end

rspec double_spec.rb を実行すると、

#<Double "Some Collaborator"> received unexpected message :foo with (no args)

というエラーが発生するはずです。

ハッシュを使用して許可されるメッセージと戻り値を定義できます

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

RSpec.describe "A test double" do
it "returns canned responses from the methods named in the provided hash" do
dbl = double("Some Collaborator", :foo => 3, :bar => 4)
expect(dbl.foo).to eq(3)
expect(dbl.bar).to eq(4)
end
end

rspec double_spec.rb を実行すると、すべての例がパスするはずです。