2012-01-31 57 views
1

我想模擬rspec中的數組(在應用程序中它是來自外部API的返回對象),但我不知道如何。如何在rSpec中模擬數組?

我試圖嘲笑這樣的:

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

它的工作原理,但我會得到:RETURN_VALUE對陣列中的每個值。 還有別的辦法嗎?

+1

我知道一個解決方案是將API中的返回對象封裝在一個包裝中,然後模擬它,但我試圖避免它。 – Indigon 2012-01-31 09:16:31

回答

6

我認爲你不需要爲數組產生測試雙打,他們會給你的測試代碼增加不必要的複雜性。你可以創建僞陣列,並在以後使用它:

items = [:return_value1, :return_value2] 

在情況下,如果你需要存根方法,並返回第一和後續調用不同的結果,你可以這樣做:

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

在這當obj.method在第一次被調用時會返回'1',並在所有後續調用中返回'2'。

此外,就您使用塊作爲存根,您可以動態計算此塊中的返回值。但這被認爲不是很好的做法,因爲地理位置存根應該返回靜態數據。

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

呵呵,沒有想到創建數組的最簡單方法。謝謝 – Indigon 2012-01-31 12:31:18