ヌルオブジェクトのダブル
Test doubles はデフォルトで厳格であり、許可されていないまたは期待されていないメッセージを受け取るとエラーを発生させます。double
の後に as_null_object
をチェーンすることで、ダブルを「緩い」ものにすることができます。明示的に許可されていないまたは期待されていないメッセージに対しては、ダブルは自身を返します。これは、任意の深さのメソッドチェーンを許可するブラックホールのヌルオブジェクトとして機能します。
as_null_object
は任意の深さのメッセージチェーンを許可し、自身を返します
次の内容で "as_null_object_spec.rb" という名前のファイルがあるとします:
RSpec.describe "as_null_object" do
it "returns itself" do
dbl = double("Some Collaborator").as_null_object
expect(dbl.foo.bar.bazz).to be(dbl)
end
end
rspec as_null_object_spec.rb
を実行すると、
すべての例がパスするはずです。
個々のメソッドは引き続き許可または期待できます
次の内容で "as_null_object_spec.rb" という名前のファイルがあるとします:
RSpec.describe "as_null_object" do
it "can allow individual methods" do
dbl = double("Some Collaborator", :foo => 3).as_null_object
allow(dbl).to receive(:bar).and_return(4)
expect(dbl.foo).to eq(3)
expect(dbl.bar).to eq(4)
end
end
rspec as_null_object_spec.rb
を実行すると、
すべての例がパスするはずです。