2012-01-31 4 views
1

私はrspecで配列をモックしようとしています(アプリケーションでは、外部APIからの戻りオブジェクトです)。rSpecで配列をモックする方法は?

私はこのようにそれをからかってみました:

item = double("item") 
item.stub(:[]) { :return_value } 

働くが、その後、私は買ってあげる:配列内の各値についてRETURN_VALUEを。 別の方法がありますか?

+1

解決策は、APIからの戻り値オブジェクトをラッパーでラップし、代わりにモックすることですが、私はそれを避けようとしています。 – Indigon

答えて

6

私はあなたが配列のテストダブルを生成する必要はないと思う、彼らはあなたのテストのコードに不要な複雑さを追加します。あなただけの偽の配列を作成し、後でそれを使用することができます。

items = [:return_value1, :return_value2] 

ケースでは、メソッドをスタブと、第1および以降の呼び出しのために異なる結果を返すために必要がある場合は、あなたがこれを行うことができます。この中

obj.stub(:method).and_return('1', '2') 

をケースobj.methodは、最初に呼び出されたときに「1」を返し、その後のすべての呼び出しで「2」を返します。

また、ブロックをスタブとして使用する限り、このブロックの戻り値を動的に計算できます。しかし、これはイディオム的にスタブは静的データを返さなければならないので、これはあまり良い方法ではないと考えられます。

obj.stub(:method) { Time.now } 
+0

duhは、配列を作成する最も簡単な方法については考えていませんでした。ありがとう – Indigon