2012-08-24 13 views
8

Dados dos modelos, alerta y código postal, donde una alerta debe tener 1 o más Zipcodes:¿Cómo se definen las fábricas anidadas 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 

¿Cómo escribo mis fábricas factorygirl de modo que:

  • fábricas código postal se definen en sus propios archivo
  • Las fábricas de alertas se definen en su propio archivo
  • ¿La alerta puede depender de la fábrica definida por el código postal?

Toda la documentación y ejemplos que leo esperan que usted defina la clase contenida dentro del archivo original de la fábrica, los empape todos o haga algún otro compromiso o solución temporal. ¿No hay una manera limpia de mantener las fábricas de especificaciones separadas?

Respuesta

12

El truco es asegurarse de que la clase contenedora, es decir, la que tiene una instrucción has_many en su definición, cree la clase contenida como una matriz en Factory girl. Por ejemplo:

En su especificación/fábricas/zipcodes.rb:

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

Y en spec/fábricas/alerts.rb:

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