2017-10-09 15 views
1

現在、私はTestクラスで多くの工場factory()を使用していますが、テストメソッドでfactory(Something::class)しか使用できないため、1に減らす方法はありますか?テスト中の工場を最小限に抑えますか?

理由私はいくつかの外部キーを渡す必要があるので、私は多くを使用しました。

だけ使用することができ、あなたのテストで
$factory->define(Something::class, function ($faker) { 
    return [ 
     'title' => $faker->title, 
     'content' => $faker->paragraph, 
     'provider_id' => function() { 
      return factory(Provider::class)->create()->id; 
     } 
    ]; 
}); 

$factory->define(Provider::class, function ($faker) { 
    $user = factory(User:class)->create(); 
    return [ 
     'user_id' => $user->id, 
     'token_id' => function() { 
      return factory(Token::class)->create(['user_id' => $user->id])->id; 
     } 
    ]; 
}); 

、その後: -

$something = factory(Something::class)->create(); 

は、ニーズに応じて、注意してください、それはいくつかの副作用を引き起こす可能性がありますが、このような構文を使用することができます

$user = factory(User::class)->create(); 

$token = factory(Token::class)->create([ 
    'user_id' => $user->id, 
]); 

$provider = factory(Provider::class)->create([ 
    'user_id'  => $user->id, 
    'token_id'  => $token->id, 
]); 

$something = factory(Something::class)->create([ 
    'provider_id' => $provider->id, 
]); 

    // Now test with $something 
+0

を、あなたは '$ user'かのいずれかを知っておく必要がありますか外部キー?それとも、 '$ something'で何かするのですか? – Jono20201

+0

私は '$ user'を気にしません。すべての工場でfakerを使用します。 –

+0

$ somethingで 'factory(Something :: class)'を使うだけです –

答えて

1

たとえば、プロバイダ・ファクトリを使用する場合、テストによっては、ユーザーは常にうまくいくかどうかが決まります。もちろん、必要であれば、あなたは常にあなたが示したすべてのこれらのメソッドをラップし、唯一の何かを返した後、あなたのテストであなただけ使用することができますヘルパーメソッドを作成することができます

$something = $this->createSomething(); 
関連する問題