2017-06-02 58 views
0

是否有可能將工廠與而非關聯到特定的ActiveRecord模型?相反:工廠的唯一目的是要建立一幫其他對象:使用FactoryGirl與單個工廠構建多個對象

# test/factories/address_options.rb 
FactoryGirl.define do 
    factory :address_option do 

    trait :create_them do 
     after(:create) do 
       create(:state) 
     county = create(:county) 
       create(:city, county: county) 
       create(:zip_code) 
     end 
    end 

    end 
end 

例:所需的用法是:create(:address_option, :create_them)

這當然不行,因爲沒有AddressOption類,更不用說address_options表。我得到的錯誤是:

NameError: uninitialized constant AddressOption

我知道我可以簡單地對關聯到一個真正的ActiveRecord對象的工廠之一創建trait。但是,這有點不同,因爲我創建了一種「聚合」工廠:一個工廠創建了一堆對象,其中一些對象相互關聯,而另一些則沒有關聯,但所有對象仍然相關。

+2

何不你是不是創建了一個輔助方法?一個工廠比一個簡單的方法有什麼好處? – spickermann

+0

@spickermann根據您的建議得到了一個可行的解決方案。 – Neil

回答

0

基於評論中的建議的工作解決方案。我不知道,如果這被認爲是「最佳實踐」爲使用的工廠,但它至少代表一個抽象的「聚合」工廠工作的解決方案:

# test/factories/aggregates/address_option.rb 
class AddressOption 
    include FactoryGirl::Syntax::Methods 

    def create_them 
      create(:state) 
    county = create(:county) 
      create(:city, county: county) 
      create(:zip_code) 
    end 
end 

使用AddressOption.new.create_them

相關問題