2017-10-09 9 views
1

현재 테스트 클래스에서 많은 공장 factory()을 사용하고 있습니다. 테스트 메소드에서 factory(Something::class) 만 사용할 수 있도록 1로 줄이는 방법이 있습니까?테스트중인 공장을 최소화 하시겠습니까?

이유 일부 외래 키를 전달해야하므로 많은 것을 사용했습니다.

$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

당신은 같은 구문을 사용할 수 있습니다

$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(); 

이 어떤 부작용을 일으킬 수 있습니다 필요에 따라주의를 - 예를 들어 공급자 팩토리를 사용할 때 사용자는 테스트에 따라 정상적으로 작동하는지 또는 작동하지 않는지 항상 만들어집니다. 물론 당신은 항상 당신이 보여 모든 방법을 포장 만 뭔가를 반환 한 다음 테스트 만 사용할 수있는 것이다 도우미 메서드 생성 할 수 있습니다 필요한 경우 :

$something = $this->createSomething();