2012-01-11 5 views
1

誰かがこれを1行に短縮する方法を知っていますか? (RSpecの2)例えばstub/mock expectation/should_receiveを1行に定義しますか?

location = mock 
location.should_receive(:build) 

は、次のように定義することができますので、誰もが指定する方法を参照してください

location = stub(build :true) 

location = stub 
location.stub(build: true) 

上記と同じですモックコールの期待?

答えて

4

location = mock.tap { |loc| loc.should_receive(:build) }

+0

これを愛してください。あなたに褒め言葉、良い先生。他にも解決策がある場合は、さらに数時間は開いたままにしておきますが、これで作業が完了します。 –

+0

@zetetic、ありがとう、それを知らなかった:) –

1

は作品ものの、醜い:すべてのテストがモックの定義を持っている場合

(location = mock).should_receive(:build) 
+0

興味深いが、そのアプローチを考えていませんでした。 –

1

は、あなたがを使用して表記を短くすることができ、ファイルの先頭でてみましょう。

let (:location) { double :location } 

は、その後、あなたが locationを使用しているたびに、それは自動的に新しいモックオブジェクトを作成します。

location.should_receive(:build) 
+0

あなたは文脈を通して同じモックを使いたい時に、これまでと同じ方法を使い、うまくいきました。 –

+0

私が知る限り、すべてのスコープに対して新しいモックオブジェクトを作成する必要があります。それは便利かもしれません。 – megas

+0

'location'はそれぞれの例で再びインスタンス化されます。特に、いくつかの例で期待値を設定する必要がある場合や、他の例で期待値を設定する必要がある場合には、これはおそらく最良の方法です。 – zetetic