3

複雑な引数 (HTML 文字列) を受け取る関数があります。この文字列に関する複数の条件を確認したい、つまり:

receiver.should_receive(:post_data).with(json_content).with(id_matching(5))

複数withの引数が機能しません。代替手段はありますか? 何らかの方法で複合マッチャーを作成できる場合は、喜んでカスタム マッチャーを定義します。

明らかに、同じテストを複数回実行し、結果についてさまざまなことをテストできますが、これは実行に数秒かかる統合テストであるため、これ以上遅くしたくありません。

ありがとう

編集:

執筆時点では、受け入れられた回答 (カスタムの説明でカスタム マッチャーを使用する) が最適なオプションのようです。ただし、完全ではありません。理想的withには、純粋なバイナリ マッチではなく、「これは予想されるタイプのアイテムでしたが、予想したものではありませんでした」という概念をサポートします。

4

2 に答える 2

8

カスタムマッチャーさえ必要なく、ブロック形式で十分な場合もあります。

receiver.should_receive(:post_data) do |*args|
  json_content = args.first
  json_content.should_not be_empty
  json_content.should include "some string"
end

RSpec モックのドキュメントの任意の処理のセクションを参照してください。

于 2014-02-10T09:17:41.363 に答える
3

カスタム マッチャーを提供する必要がありますが、エラー レポートを簡単に定義して、何が失敗したのか、その理由を具体的に示すことができます。https://github.com/dchelimsky/rspec/wiki/Custom-Matchersを参照してください。

特に、 https://github.com/rspec/rspec-mockswithの「引数マッチャー」セクションの最初の段落の最後の文で述べたように、カスタム マッチャーは への引数として提供されます。

エラー報告に関しては、このユース ケースに適用されるカスタムの失敗メソッドはありませんがdescription、カスタム マッチャーのメソッドを使用して、「期待される」値として示される文字列を生成し、その目的ではありませんが、何かを出力するように定義できます。失敗した一致について必要です。

于 2013-07-11T20:20:15.540 に答える