1

rspec-mocks 'expect(target).to receive(:message).with(arg_matcher)は、 に渡された引数マッチャーと一致しないパラメーターでターゲットが呼び出された場合にのみ、テストの最後にエラーを表示しますwith。強制的に失敗させる方法はありますか?つまり、一致しないパラメーターでターゲットが呼び出されるとすぐに失敗しますか? RR はこのように機能します。

私が直面している問題は、上記のように arg_matcher を使用してこのモックを設定すると、ターゲットが異なるパラメーターで呼び出されるためテストが失敗し始めますが、テストの終了前に別のアサーションが失敗するため、エラーのみが表示されることです不足しているモックからではなく、このアサーションから(予想されるパラメーターと実際に呼び出されたパラメーターの違いを示していたでしょう)。

rspec-mocks の使用 3.3.2.

4

2 に答える 2

2

receive熱心に失敗させる方法がわかりません。ただし、have_received熱心に失敗するため、それがいくつかの期待の最初のものである場合、テストに失敗し、RSpec が報告するものになります。

class Foo
  def self.bar(baz)
  end
end

describe "RSpec" do
  it "reports a non-mock expectation failure before a mock expectation failure" do
    expect(Foo).to receive(:bar).with(1)
    expect(true).to be_falsy # RSpec reports this failure
    Foo.bar 2
  end

  it "reports a spy expectation failure when you'd expect it to be reported" do
    allow(Foo).to receive(:bar) # Spy on Foo
    Foo.bar 2
    expect(Foo).to have_received(:bar).with(1) # RSpec reports this failure
    expect(true).to be_falsy
  end

end

詳細については、RSpec スパイのドキュメントを参照してください。

このソリューションは、次の場合に最適です。

通常のモックと Adarsh のソリューションの方が優れています

  • どちらかが失敗するかどうかに関係なく、両方の期待の結果を見たい
  • スパイを設定するaggregate_failures余分な入力を気にするよりもブロックを気にする場合allow
于 2016-06-02T02:50:06.510 に答える