2017-12-20 12 views
0

を作成:factory_1、factory_2 彼らは、異なる特性のtrait_1_factory_1を持って、trait_2_factory_1などだから私は別の工場を持ってそれを利用した複数の異なる工場の作成方法

は、同じコマンドから特定のtrairsでfactory_1とfactory_2を作成するにはpossbileです、のような:

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など

は、私はあなたがFactory.createを言うとき、すなわち、ここでは異なるの工場を使用してオブジェクトを作成したいと考えているあなたに

+0

'Factory.create'または' FactoryBot.create'ですか? –

+0

@JagdeepSingh fixed – user8217653

答えて

0

いいえ、同じコマンドからfactory_1とfactory_2を作成することはできません。

ここで、 'factory1'はオブジェクトが作成されたModelまたはclassです。 factoriesarray

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

ストアの複数を、それを繰り返す:

FactoryBot.create(:factory1)

あなたは、その後、スペックDRYを作るのではなく、上記のように行うためにそれをやっている場合は、以下のように行うことができます。

+0

なぜ* in *工場 – user8217653

+0

'*'は配列から要素を取り出すのですか? 'FactoryBot.create()'に 'array'より渡す要素だけが必要なので – Rhunal

0

をありがとう、あなたは平均値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 
関連する問題