FactoryGirl create_list传递多个值

时间:2015-07-14 07:24:23

标签: ruby factory-bot

如果我有这个工厂:

factory :product, class: Product do
  name        { Faker::Commerce.product_name }
  description { Faker::Lorem.paragraph }
  price       { Faker::Number.number(3) }
end

我可以使用create_list创建2个这样的产品:

FactoryGirl.create_list(:product, 2)

但我想将默认值传递给我的两个产品,我认为理论上会有这样的东西吗?:

prods = [{:name => "Product 1"},{:name => "Product 2"}]
FactoryGirl.create_list(:product, prods.count, prods)

我已经搜索了一段时间但无法找到答案,是否可以使用像create_list这样的优雅解决方案?

我想要这个解决方案的原因是因为:product是父模型的许多子关联之一。我想要一种可配置的方式,我可以通过单个FactoryGirl.create命令生成父模型工厂,并传递我想要的子关联的所有值(通过使用FactoryGirl的特征和忽略块)。我希望这是有道理的。我可以在这里显示一堆代码,但我相信这提供了足够的上下文?

2 个答案:

答案 0 :(得分:8)

您可以自己生成列表:

data = [{:name => "Product 1"},{:name => "Product 2"}]
products = data.map { |p| FactoryGirl.create(:product, p) }

哪个应该为您提供一系列产品。

答案 1 :(得分:3)

v5.2.0起,您可以执行以下操作:

twenty_somethings = create_list(:user, 10) do |user, i|
  user.date_of_birth = (20 + i).years.ago
end