我試圖創建使用模型的一個RSpec模擬控制器上的測試,它似乎只有在工作的時候說RSpec的嘲諷不會被調用
Type.any_instance.should_recieve(...)
,而不是
instancename.should_receive(...)
我的代碼看起來像這樣。 (一般我用FactoryGirl,但我不是在這個例子中,以確保它不是問題)
it "calls blah on foo" do
foo = Foo.new
foo.save
foo.should_receive(:blah) #this fails because it's called 0 times
#Foo.any_instance.should_receive(:blah) #this would succeed
post :create, {:foo => foo}
end
,並在我的控制器
def create
foo = Foo.find_by_id(params[:foo])
foo.blah
#other stuff thats not related
end
我知道我可以嘲笑Foo.find_by_id和有它返回foo,但我覺得我不應該這樣做,因爲它應該被返回,這意味着如果我停止使用find_by_id,測試會中斷,這實際上不是一個重要的細節。
任何想法我做錯了什麼?如果我不必在任何地方說any_instance,並且不必模擬find_by_id,我覺得我的測試會更好。
謝謝。這就是我在想什麼,我只是希望有一種方式不需要調用find_by_id。調用查找似乎是一個更好的解決方案,所以我會這樣做。 – bdwain 2013-04-29 05:34:20
只是一個領導。我不認爲有關find_by_id調用的部分找到了作品。我試過了,直到我找到find_by_id爲止。 – bdwain 2013-04-29 06:09:27
對不起,我必須回顧一下,我以爲我在某個地方做過,但我可能是錯的。我會盡快給您回覆。 – 2013-04-29 11:14:40