使用相同的create方法创建多个不同的工厂

时间:2017-12-20 06:57:40

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

所以我有不同的工厂:factory_1,factory_2 它们具有不同的特征trait_1_factory_1,trait_2_factory_1等

可以使用同一命令创建具有特定trairs的factory_1和factory_2,例如:

  

FactoryBot.create(   :factory_1,traits_1_factory_1,   :factory_2,   :factory_2,traits_1_factory2   )

我尝试了(){} []的不同组合,但似乎不适合我吗?这可能吗? 这是唯一的解决方案吗? Factory.create(:factory_1,traits_1_factory_1) Factory.create等。

谢谢

2 个答案:

答案 0 :(得分:0)

我相信你想在这里使用不同的工厂创建对象,即当你说Factory.create时,你的意思是FactoryBot.create

不幸的是,我无法找到任何直接命令来完成这样的事情。这是使用Hash和循环的东西。

factories_and_traits = { factory_1: [trait_1_factory_1, trait_2_factory_1],
                         factory_2: [trait_1_factory_2] }

factories_and_traits.each do |factory, traits|
  FactoryBot.create(factory, *traits)
end

答案 1 :(得分:0)

不,不可能从同一命令创建factory_1和factory_2。

在这里,' factory1'是创建对象的Modelclass

FactoryBot.create(:factory1)

如果你是为了制作规格DRY,那么你可以这样做,而不是像上面那样做,你可以这样做:

[
  [:factory_1, traits_1_factory_1],
  [:factory_2, traits_1_factory2]
].each do |factory|
  FactoryBot.create(*factory)
end

factories中存储多个array并对其进行迭代。