2017-10-27 23 views
1

내 회사 프로젝트에서 단위 테스트를 구현하려고하는데 데이터베이스에서 별도의 데이터 집합을 사용하려고하면 이상한 문제가 발생합니다.단위 테스트의 루멘 - 시더

제한된 환경에서 테스트를 수행하려면 전용 데이터베이스에서 데이터를 입력하는 가장 쉬운 방법을 찾고 있습니다. 짧게 말해서, 필자는 삽입 된 데이터의 MySQL 덤프를 사용하기로 결정했습니다.

public function run() 
{ 
    \Illuminate\Support\Facades\DB::unprepared(file_get_contents(__DIR__ . '/data1.sql')); 
} 

지금 여기에 문제가있다 :

이것은 기본적으로 내 시더 코드입니다. 내 단위 테스트에서 , 나는 시더를 호출 할 수 있지만 :

  • 나는 setUpBeforeClass()에있는 시더를 호출하는 경우, 그것은 작동합니다. 다른 테스트에 대해 다른 데이터 집합을 호출 할 수 있기 때문에 내 요구에 맞지는 않지만
  • 테스트 내에서 시드를 호출하면 데이터가 데이터베이스에 삽입되지 않습니다 (트랜잭션의 유무에 관계없이). 특성).
  • 원시 원시 파일을 사용하지 않고 :: raw 또는 :: unprepared 또는 :: statement 대신 DB :: insert를 사용하면 작동합니다. 하지만 필자의 삽입물은 너무 복잡합니다.

는 여기에 내가 같은 결과를 시도 몇 가지이다 :

DB::raw(file_get_contents(__DIR__.'/database/data1.sql')); 
    DB::statement(file_get_contents(__DIR__ . '/database/data1.sql')); 

    $seeder = new CheckTestSeeder(); 
    $seeder->run(); 

    \Illuminate\Support\Facades\Artisan::call('db:seed', ['--class' => 'CheckTestSeeder']); 

    $this->seeInDatabase('jackpot.progressive', [ 
     'name_progressive' => 'aaa' 
    ]); 

진행 방법에 대한 모든 포인터를과 나는 setUpBeforeClass (에 있음을한다면 나는 다른 행동을 왜) 시험 내 것 감사하겠습니다!

답변

0

설명 here과 같이 Illuminate\Foundation\Testing\RefreshDatabase 형질을 사용할 수 있습니다. 더 필요한 것이 있다면 RefreshDatabase 특성에서 refreshTestDatabase 메서드를 무시할 수 있습니다.

protected function refreshTestDatabase() 
{ 
    parent::refreshTestDatabase(); 

    \Illuminate\Support\Facades\Artisan::call('db:seed', ['--class' => 'CheckTestSeeder']); 
}