2012-08-24 14 views
8

Với hai mô hình, cảnh báo và mã zip, nơi một cảnh báo phải có 1 hoặc nhiều zipcodes:Làm cách nào để xác định các Nhà máy lồng nhau với 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 

Làm thế nào để viết các nhà máy FactoryGirl tôi để:

  • nhà máy Mã vùng được quy định tại riêng của họ file
  • Các nhà máy thông báo được xác định trong hồ sơ riêng của họ
  • Cảnh báo có thể dựa vào nhà máy do Zipcode xác định?

Tất cả tài liệu và ví dụ tôi đọc mong đợi bạn xác định lớp được chứa bên trong tệp nhà máy gốc, gộp chúng lại với nhau hoặc thực hiện một số thỏa hiệp hoặc công việc khác. Không phải là một cách sạch sẽ để giữ cho các nhà máy spec riêng biệt?

Trả lời

12

Bí quyết là đảm bảo lớp chứa, nghĩa là một lớp có câu lệnh has_many trong định nghĩa của nó, tạo lớp được chứa dưới dạng một mảng trong Girl factory. Ví dụ:

Trong spec của bạn/nhà máy/zipcodes.rb:

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

Và trong spec/nhà máy/alerts.rb:

FactoryGirl.define do 
    factory :alert do 
    zipcode { Array.new(3) { FactoryGirl.build(:zipcode) } } 
    end 
end 
Các vấn đề liên quan