工厂女孩create_list传入多个值。

问题描述 投票:11回答:2

如果我有这个工厂,

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的特性和忽略块)。我希望这能让人明白。我可以在这里展示一堆代码,但我相信这能提供足够的上下文?

ruby factory-bot
2个回答
11
投票

你可以自己生成列表。

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

你应该会得到一个产品的数组。


2
投票

因为 v5.2.0 你可以这样做。

twenty_somethings = create_list(:user, 10) do |user, i|
  user.date_of_birth = (20 + i).years.ago
end
© www.soinside.com 2019 - 2024. All rights reserved.