2009-08-16 34 views
0

我很喜歡在所有地方使用mock和stubs以保持我的規格快速運行。 我種難倒,我怎麼可能這樣做是爲了測試在下面的find_special方法:如何使用最少的數據庫開銷測試rails中的關聯擴展邏輯

has_many :foos do 
    def find_special 
     if proxy_owner.baz 
     ... find stuff 
     else 
     ... find other stuff 
     end 
    end 
    end 

我不介意使用:延長=>模塊這個語法,但我不」我認爲它有所作爲。

回答

1

你在問如何在proxy_owner上存根方法嗎?在這種情況下,不是您要撥打foos的對象嗎?

# in Mocha 
item.stubs(:baz).returns(true) 
item.foos.find_special # => find stuff 
item.stubs(:baz).returns(false) 
item.foos.find_special # => find other stuff 

這是未經測試但也許這將讓你關閉。

+0

但我仍然需要做一堆Foo對象並在測試之前將它們保存到數據庫中,對嗎? 我正在尋找一種方法,可以測試find_special方法是否會使用正確的參數調用Foo.find,而實際上並不需要針對數據庫運行查詢。 – 2009-08-17 14:13:33

+0

較短的版本:我知道如何用工廠/燈具測試 - 我想看看我是否可以在沒有它們的情況下進行測試。 – 2009-08-17 14:14:42

+0

您可以在內存中構建項目和foos:Item.new和item.foos.build。無需觸摸數據庫。 – ryanb 2009-08-17 14:36:07