2012-08-24 11 views
8

Dati due modelli, di avviso e di Codice Postale, dove si Alert deve avere 1 o più Zipcodes:Come si definiscono le fabbriche annidate con 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 

Come faccio a scrivere le mie fabbriche factorygirl in modo che:

  • fabbriche Codice Postale sono definiti nel proprio file
  • Le factory di avviso sono definite nel proprio file
  • L'avviso può fare affidamento sulla fabbrica definita da Zipcode?

Tutta la documentazione e gli esempi che ho letto si aspettano di definire la classe contenuta all'interno del file di fabbrica principale, inserirli tutti insieme, o fare qualche altro compromesso o soluzione. Non c'è un modo pulito per tenere separate le fabbriche delle specifiche?

risposta

12

Il trucco è assicurarsi che la classe contenitore, ovvero quella con un'istruzione has_many nella sua definizione, crei la classe contenuta come matrice in Factory girl. Per esempio:

nelle specifiche/fabbriche/zipcodes.rb:

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

E in spec/fabbriche/alerts.rb:

FactoryGirl.define do 
    factory :alert do 
    zipcode { Array.new(3) { FactoryGirl.build(:zipcode) } } 
    end 
end 
Problemi correlati