2012-10-22 54 views
4

我正在尋找關於如何在處理具有許多所需關聯對象的對象時有效使用紅寶石寶石'FactoryGirl'的建議。使用FactoryGirl創建具有所需關聯的對象

例如,假設我在我的類之間有以下關係。現在

class A < ActiveRecord 
    has_many B 
end 

class B < ActiveRecord 
    belongs_to A 
    has_many C 
end 

class C < ActiveRecord 
    belongs_to B 
end 

,如果我想編寫測試用例爲我的C控制器,我不得不創建這個鏈條中的所有對象。現在,這就是我在我的工廠裏所做的。但是有更好的方法嗎?

+0

您是否在問如何改進工廠內的代碼,或者您在問如何改進您的測試? – gylaz

+0

其中之一。或兩者。如果你知道寫一個更好的方法來編寫工廠,或者更好的方法來構造測試,我當然會很欣賞它的學習。 – Eytan

回答

7

如果你的工廠設置是這樣的:

FactoryGirl.define do 
    factory :library do 
    name "Chicago Public Library" 
    street_address "123 Morgan St." 
    end 

    factory :book do 
    title "A Great Book" 
    author "Mandy Yeats" 
    association :library 
    end 

    factory :page do 
    page_number 123 
    association :book 
    end 
end 

只要你創建一個實例:在您的測試頁,FactoryGirl還將創建一個實例:書:圖書館。你不需要先創建一個庫和一本書。如果您創建了一本:book,則還會爲該測試創建一個:library。您可以使用這些實例在測試中是這樣的:

page.book.library.name  # after using FactoryGirl.create(:page) 
page.book.author 

book.library.street_address # after using FactoryGirl.create(:book) 

這是最簡單的方式做到這一點,我已經找到。

+0

我喜歡這個。我嘗試了相反的方式來創建自上而下的關聯,圖書館將鏈接到書籍,書籍將鏈接到頁面。所以調用FactoryGirl.create(:library)會創建一個帶有書和頁面的庫;但是,電話簿只會導致一本書。你使用的方法似乎好得多。 – Eytan

相關問題