2012-01-31 102 views
1

我是使用工廠女孩的新人,我覺得我可能有一些關於它是如何工作和我應該如何使用它的誤解。這是問題代碼的一個片段。紅寶石工廠女孩創造多個對象

FactoryGirl.define do      
    factory :li_store , :class => Store do 
    ...store stuff...blah...blah   
end          

factory :li_line_item_stores_two,:class=>LineItemsStore do 
    association :store, :factory=>:li_store      
    association :line_item , :factory=>:li_line_item_two               
end                
factory :li_line_item_stores_three,:class=>LineItemsStore do 
    association :store :factory => :li_store         
    association :line_item , :factory => :li_line_item_three             
end 

現在,如果我訪問:li_line_item_stores_two和:li_line_item_stores_two每一個都有其商店屬性不同的對象。對於我的測試,我需要兩個對象具有相同的存儲對象。

有沒有人知道我失蹤的FactoryGirl的哪個方面,或者我應該如何確保兩個對象都引用相同的商店對象?

任何幫助,非常感謝。

回答

3

您想在您的factories.rb文件中定義baseline對象和屬性。你不想定義一組不同的相同版本的對象。相反,factories.rb應該是這個樣子:在您的測試

FactoryGirl.define do 
    factory :li_store do 
    whatever 
    end 

    factory :li_line_item do 
    whatever 
    end 

    factory :li_line_item_store do 
    association :store, :factory => :li_store 
    association :line_item, :factory => :li_line_item 
    end 
end 

這些屬性就會重寫(或可以保留與基線值):

def test_something 
    store = Factory(:li_store) 
    li_line_item_store_one = Factory(:li_line_item_store, :store => store) 
    li_line_item_store_two = Factory(:li_line_item_store, :store => store) 
end 

通過上述,您現在有兩個具有不同訂單項和相同商店的li_line_item_store實例。

+0

謝謝湯姆。就是這樣。我必須圍繞着你所說的想法,FactoryGirl創建基線對象,然後稍微修改它們以供測試。我的測試代碼如下所示,並按照計劃運行store = Factory(:li_store) customer = Factory(:li_customer,:store => store) line_item_store_one =工廠(:li_line_item_stores_one,:store => store) line_item_store_two = Factory (:li_line_item_stores_two,:store => store) line_item_store_three =工廠(:li_line_item_stores_three,:store => store) – 2012-01-31 20:49:21