如何使用FactoryBot定义关联工厂?

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工厂:

  • 将邮政编码工厂定义在它们自己的文件中
  • 将警报工厂定义在它们自己的文件中
  • 使警报工厂能够依赖于由邮政编码定义的工厂?

我读到的所有文档和示例都期望你在父工厂文件中定义包含的类,将它们全部放在一起,或做一些其他妥协或解决方法。难道没有一种简洁的方式来保持规范工厂分开吗?

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接