2017-11-29 15 views
0

Laravel 5.4에서 기능 테스트에 문제가 발생했습니다. 쿼리 빌더 중 하나를 사용할 때마다이 오류는 일반적으로 단지 발생 내 지식이라는 사실이Laravel 5.4 SQLite를 사용하여 데이터베이스를 테스트 할 때 ModelNotFoundException이 발생했습니다

1) Tests\Feature\ParseAccountingFilesTest::testExample
│/Middleware/ValidatePostSize.php(27): Illuminate\Routing\Pipeline->Illuminate\R Illuminate\Database\Eloquent\ModelNotFoundException: No query results for model [App\QueuedAction] 1

내가 생각하는 이상이다 : 나는 SQLite는 메모리 구성 내 데이터베이스 테스트를 실행하려고 할 때마다 나는이 오류 -OrFail() 메소드. 내 코드는 데이터베이스 큐 드라이버와 MySQL을 데이터베이스 드라이버로 사용할 때 테스트 외부에서 완벽하게 작동합니다. 문제를 디버깅 한 결과 아래의 클래스 생성자에서 다음 문에 의해 발생한 것으로 나타났습니다.

$this->scheduledAction = $action; 

이 오류는 이해가되지 않습니다. 관련된 쿼리가 없어야하며 단순한 할당 만 있어야합니다. 이 클래스는 실제 작업 클래스가 이미 대기중인 작업을 추적하기위한 간단한 상위 클래스로 사용됩니다. 여기

abstract class SchedulesOnce implements ShouldQueue 
{ 
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; 

    protected $scheduledAction; 

    public function __construct(string $id, string $type) 
    { 
     $action = new QueuedAction(); 
     $action->id = $id; 
     $action->type = $type; 
     $action->save(); 
     $this->scheduledAction = $action; 
    } 

    // Execute the job 
    public function handle() 
    { 
     $this->execute(); 

     // Delete the queue reservation 
     $this->scheduledAction->delete(); 
    } 

    // Child functionality 
    protected abstract function execute(); 
} 

는 오류가 표시되는 이유는 정말 모르겠어요 내 phpunit.xml

<php> 
<env name="APP_ENV" value="testing"/> 
<env name="CACHE_DRIVER" value="array"/> 
<env name="SESSION_DRIVER" value="array"/> 
<env name="QUEUE_DRIVER" value="sync"/> 
<env name="DB_CONNECTION" value="sqlite"/> 
<env name="DB_DATABASE" value=":memory:"/> 
</php> 

답변

0

의 관련 라인하지만 이전에 나는 Laravel 5.3 작업 유사한 테스트 설정했다.

5.4에서 5.5로 업그레이드하면 문제가 해결 된 것으로 보입니다.