1

私はrspec-mocksを読んでいて、Message Expectations と少し混乱しました。

メッセージの期待は、サンプルが終了する少し前にテスト ダブルがメッセージを受信するという期待です。メッセージが受信された場合、期待は満たされます。そうでない場合、この例は失敗します。

validator = double("validator")
validator.should_receive(:validate).with("02134")
zipcode = Zipcode.new("02134", validator)
zipcode.valid?

したがって、私の理解では、ダミーオブジェクトを作成し、引数を使用してメッセージ(ActiveModelからの検証)を「受信」するように指定します02134。ある時点で成功した場合、このテストはパスします。

私の質問は:

  1. なぜに合格できるのですvalidatorZipcode.new?あなたのアプリケーション コードは、追加の引数 (テスト ダブル) を受け取ることを想定していますか?

  2. テストダブルの「メッセージを受信する」とは正確にはどういう意味ですか? validateメッセージ(この場合はメソッド)によって呼び出されるということですか?

ありがとう!

4

1 に答える 1

2

Ruby には型がないため、任意のオブジェクトを任意のメソッドに送信できます。これはあなたの答えです1

あなたのために2

分離されたメソッドをテストするには、実際には完全なオブジェクトは必要ないため、double は優れています。

should_receive(:foo)意味:

  • ダブルがメソッドを受け取ることを期待していますfooyour_double.fooどこか)

  • fooand_returnは呼び出されませんが、spec を続行するために必要な結果を返すことができます ( を使用)。

于 2013-03-07T15:37:03.167 に答える