質問

ダブルを作成しました。メソッドと巨大なハッシュを引数として呼び出すコードを実行しています。引数の1つのキーを確認してから、特定のハッシュを返します。

これは私がしているものです

before :each do
  allow(@my_double).to receive(:do_stuff).and_return({stuff: 42})
end
it "can do stuff" do
  expect(@my_double).to receive(:do_stuff) do  |arg|
    expect(arg).to be_a(Hash)
    expect(arg[:my_arg]).to eq(3)
  end
  TestObject.stuff() # will invoke do_stuff on the double
end
.

do_stuffが初めて呼び出されたのは、trueブロックの結果であるが、後続の呼び出し(Palyでテスト済み)では、最初のコールが間違っているため、最初のコールが間違っているため、receiveが正しく返されます。戻ったときにCall{stuff: 42}を試みるとき。

[:stuff]を倍の動作を定義しようとしているので、allowの下部に戻りたくないが、それの周りの方法はありますか?

役に立ちましたか?

解決

は、答えを考え出しています文書化されていない引数のマッチャー最初のコメント

expect(@my_double).to receive(:do_stuff).with(hash_including(my_arg: 3))
.

これはうまく機能します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top