使用工厂女孩创建has_many关系的特征

Jos*_*ook 4 rspec associations traits has-many factory-bot

我想要干掉我的测试套件.尝试创建一个特征,表示父工厂上has_many关系的特定值.理想情况下,这些值将从单独的工厂创建.

我想做这样的事情:

factory :room do
  trait :bathroom do 
    type :bathroom
  end
end

factory :house do 
  trait :one_bathroom do 
    association, :rooms, factory: [:room, :bathroom]
  end
end
Run Code Online (Sandbox Code Playgroud)

如果房子和房间之间的关系是1比1,上述情况应该有效.但House和Room有一对多的关系,所以房子里有一系列房间.在这个例子中,我希望创建一个房间,只有一个浴室的房间.

有任何想法吗?

Leo*_*Leo 7

要创建一对多关系,您可以这样:

factory :room do
  factory :bathroom do
    type :bathroom
  end
  factory :bedroom do
    type :bedroom
  end
end

factory :house do
  ignore do
    num_bathrooms 0
    num_bedrooms 0
  end

  trait :two_bathrooms do
    num_bathrooms 2
  end

  trait :three_bedrooms do
    num_bedrooms 3
  end

  after(:create) do |house, evaluator|
    create_list(:bathroom, evaluator.num_bathrooms, house: house)
    create_list(:bedroom, evaluator.num_bedrooms, house: house)
  end
end
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看此链接的关联部分中的最后一个示例.