2016-05-14 69 views
0

我是新來的工廠女孩​​。我想創建一個屬於成員資格和股權工廠的共享工廠(以便兩者都與同一個組實例關聯)。我試圖按照以下方式編寫我的Share工廠,而不是使用關聯方法來避免將創建共享的回調。在之前使用瞬態屬性(:create)回調

factory :share do 
    transient do 
    same_group 
    end 

    before(:create) do |share, evaluator| 
    stake = create(:shareless_stake, group: evaluator.same_group) 
    member = create(:shareless_membership, group: evaluator.same_group) 
    share.stake = stake 
    share.membership = member 
    end 
end 

然後我想創建分享這樣的:

share = create(:share, same_group: create(:group)) 

我得到一個錯誤說,「same_group」特質沒有被註冊。當我創建一個特性,或者通過這個名稱在Group工廠下創建一個工廠時,它會抱怨對於構建的Share實例沒有'group ='setter方法。

我很困惑,因爲它看起來像factory_girl試圖對待我的瞬態屬性作爲共享,我不想要的實際屬性。我只想讓same_group成爲一個Group實例的變量,我可以將它傳遞給before(:create)塊。我究竟做錯了什麼?

回答

2

定義same_group沒有默認值會導致Factory Girl將其視爲關聯而不是屬性(並嘗試查找具有相同名稱的工廠)。將此行更改爲例如same_group nil可以解決這個問題。 Factory Girl的一個公然混淆的方面是,同一個方法可以被視爲屬性或關聯,這取決於參數的數量或塊的存在。

相關問題