2012-08-24 71 views
8

鑑於兩款車型,警報和郵政編碼,其中一個警報必須有1層或多個郵編:如何用FactoryGirl定義嵌套工廠?

class Alert < ActiveRecord::Base 
    attr_accessible :descr, :zipcode 

    has_many :zipcode 
    validates :zipcode, :length => { :minimum => 1 } 
end 

class Zipcode < ActiveRecord::Base 
    attr_accessible :zip 
    belongs_to :alert 
end 

我怎樣寫我的FactoryGirl工廠,使:

  • 郵編工廠在自己的定義文件
  • 警報工廠在自己的文件中定義
  • 警報可以依賴Zipcode定義的工廠嗎?

我所閱讀的所有文檔和示例都希望您在父工廠文件中定義所包含的類,將它們全部混合在一起,或者採取其他一些妥協或解決辦法。有沒有一種乾淨的方式來保持規格工廠分開?

回答

12

訣竅在於確保容器類(即其定義中具有has_many語句的容器類)在Factory Girl中創建包含的類作爲數組。例如:

在你的投機/工廠/ zipcodes.rb:

FactoryGirl.define do 
    factory :zipcode do 
    zip { 78701 + rand(99) } 
    end 
end 

而且在規格/工廠/ alerts.rb:

FactoryGirl.define do 
    factory :alert do 
    zipcode { Array.new(3) { FactoryGirl.build(:zipcode) } } 
    end 
end 
相關問題