2013-07-10 62 views
22

默認情況下,FactoryGirl調用關聯工廠以創建它們。我可以通過工廠關聯作爲參數。但是我怎麼能傳遞一個應該在關聯鏈中深度使用的對象呢?如何通過FactoryGirl中的關聯鏈傳遞參數

例如:

我有一個後,其具有PostsManager,它有一個帳號,屬於CURRENT_USER。

當我做一個Factory(:post)它創建一個PostsManager,它創建一個帳戶,它不屬於(存根)current_user。

所以,在使用後出廠規格我必須做的:

account = Factory(:account, user: current_user) 
post_manager = Factory(:post_manager, account: account) 
post = Factory(:post, post_manager: post_manager) 

我想要做的就是調用工廠Factory(:post, user: current_user),然後通過current_user一路通過協會的帳戶工廠。有沒有辦法做到這一點?

+0

你會添加代碼示例。 –

+0

請閱讀http://sscce.org。沒有更多的信息,我們無法給你準確的答案。 –

+0

他問如果屬性可以通過關聯傳遞,如果它們不存在於原始模型上。這可以通過瞬態屬性完成。如果您將重新提出問題,我有一個答案。 –

回答

21

不確定你使用的是哪個版本的FactoryGirl,但是如果你使用的是最新版本(2.6+),你可以使用瞬態屬性(詳見"Getting Started" page)。你可以這樣做:

FactoryGirl.define do 

    factory :post do 
    ignore do 
     user nil 
    end 
    posts_manager { FactoryGirl.build(:posts_manager, :user => user) } 
    end 

    factory :posts_manager do 
    ignore do 
     user nil 
    end 
    account { FactoryGirl.build(:account, :user => user) } 
    end 

    factory :account do 
    user { user } 
    end 

end 

FactoryGirl.create(:post, :user => current_user) 
+1

我希望我在2年前找到了這個。 – stringsn88keys

+3

對於FactoryGirl的最新版本,使用'transient'而不是'ignore' –