クラスがいくつかの引数を持つメソッドを受け取ることを期待する仕様があります。引数 hash からキーと値のペアのサブセットを確認したいだけです。
it 'calls Stripe::Checkout::Session#create with the correct line items' do
expect(Stripe::Checkout::Session).to receive(:create).with({
line_items: [{
price: "bla",
quantity: 1
}],
}
)
subject
end
ここでは、引数ハッシュに line_items が正しい値で存在することを確認したいだけです。
ただし、実際に受信したハッシュにはさらに多くの値が含まれており、次のエラーが発生します。
#<Stripe::Checkout::Session (class)> received :create with unexpected arguments
expected: ({:line_items=>[{:price=>"bla", :quantity=>1}]}, *(any args))
got: ({:allow_promotion_codes=>true, :automatic_tax=>{:enabled=>true}, :billing_address_collection=>"requir...vh.me/fr/thank-you?checkout_session_id={CHECKOUT_SESSION_ID}", :tax_id_collection=>{:enabled=>true}}, {:stripe_account=>"bla"})
キーと値のペアのサブセットの存在のみをチェックするように rspec に指示するにはどうすればよいですか?
ハッシュのサブセットと一致する hash_include が必要です。
...to receive(:create).with(hash_including(
line_items: [{
price: "bla",
quantity: 1
}],
)
ドキュメントを参照してください: https://relishapp.com/rspec/rspec-mocks/v/3-2/docs/setting-constraints/matching-arguments