10

给定两个模型,Alert 和 Zipcode,其中一个 Alert 必须有 1 个或多个 Zipcode:

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 

我如何编写我的 FactoryBot 工厂,以便:

  • 邮政编码工厂在他们自己的文件中定义
  • 警报工厂在它们自己的文件中定义
  • Alert 可以依赖 Zipcode 定义的工厂吗?

我阅读的所有文档和示例都希望您在父工厂文件中定义包含的类,将它们全部放在一起,或者做出其他妥协或解决方法。没有一种干净的方法可以将规范工厂分开吗?

4

1 回答 1

12

诀窍是确保容器类,即定义中有 has_many 语句的容器类,在 FactoryBot 中将包含的类创建为数组。例如:

在您的 spec/factories/zipcodes.rb 中:

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

在 spec/factories/alerts.rb 中:

FactoryBot.define do
  factory :alert do
    zipcode { Array.new(3) { FactoryBot.build(:zipcode) } }
  end
end
于 2012-08-24T23:16:32.463 回答