使用FactoryGirl在单个工厂中构建多个对象

时间:2017-06-02 17:56:12

标签: ruby-on-rails ruby factory-bot

是否可以将的工厂与特定的ActiveRecord模型相关联?相反:工厂的唯一目的是构建一堆其他对象:

git rebase --onto master develop my_fix

Ex:所需的用法是:# test/factories/address_options.rb FactoryGirl.define do factory :address_option do trait :create_them do after(:create) do create(:state) county = create(:county) create(:city, county: county) create(:zip_code) end end end end

这当然不起作用,因为没有create(:address_option, :create_them)类,更不用说AddressOption表了。我得到的错误是:

  

NameError:未初始化的常量AddressOption

我知道我可以在其中一个与真正的activerecord对象关联的工厂上创建一个address_options。但这有点不同,因为我正在创建一种“聚合”工厂:一个工厂,它创建了一堆对象,其中一些对象彼此关联,而其他对象没有关联,但所有对象仍然相关。

1 个答案:

答案 0 :(得分:0)

基于评论中的建议的工作解决方案。我不确定这是否被认为是最佳实践"对于使用工厂,但它至少是一个工作的解决方案,用于表示抽象的"聚合"工厂:

# test/factories/aggregates/address_option.rb
class AddressOption
  include FactoryGirl::Syntax::Methods

  def create_them
             create(:state)
    county = create(:county)
             create(:city, county: county)
             create(:zip_code)
  end
end

用法AddressOption.new.create_them