2011-01-12 79 views
3

我可能失去了一些東西完全明顯,但爲什麼我必須這樣做:爲什麼你不能直接存根!模擬對象?

setup do 
    @person = mock("person") 
    @person.stub!(:name).and_return("david") 
end 

而不是

@person = mock("person").stub!(:name).and_return("david") 

什麼是假(「字符串」)返回不允許它被釘住而不允許@person被釘住?是模擬不返回一個對象(也許只是修改的mock'ed出功能的一些內部哈希表,然後返回一個單獨的對象?

回答

3

因爲and_return調用不返回存根對象。mock一樣。

首先,爲了有一個模擬對象可以使用,你必須創建實際的模擬對象並將它分配給一個變量,當你調用mock("person").stub!...模擬對象在調用鏈中丟失時,你的鏈接版本只有在and_return返回原始模擬對象

+0

謝謝 - 由過度困惑阿雷爾和JQuery :) – David 2011-01-12 21:15:04

3

由於Peter指出,@person正在分配來自and_return的值而不是模擬對象。這原來是一個Proc

你可以這樣做:

@person = mock("person").tap {|obj| obj.stub!(:name).and_return("david") } 

雖然這一切都是不必要的,因爲你可以宣佈在模擬定義存根權:

@person = mock("person", :name => "david") 
相關問題