FactoryGirl create_list传递多个值

jos*_*eir 11 ruby factory-bot

如果我有这个工厂:

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

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

FactoryGirl.create_list(:product, 2)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

mhu*_*ter 10

您可以自己生成列表:

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

哪个应该留给你一系列产品.


小智 7

v5.2.0开始你可以这样做:

twenty_somethings = create_list(:user, 10) do |user, i|
  user.date_of_birth = (20 + i).years.ago
end
Run Code Online (Sandbox Code Playgroud)