2017-09-30 21 views
1

私はジョブクラス(ルーメンキュー)のいくつかのメソッドをテストして(機能テストをphpunit経由で)正常に動作していることを確認したい。ジョブクラスのテスト機能

Error: Call to a member function getJobId() on null

このようなテストコードを見て:

/** 
* @test 
*/ 
public function it_has_successfully_uploaded() 
{   
    $job = new SomeJob(['file' => ['file1.zip']]); 

    $job->handle(); 
} 

問題は、私は、コンソールからのPHPUnitを実行する場合、私はエラーを取得するジョブ・クラスが$this->job->getJobId()$this->release(5);

のようないくつかの仕事の方法を持っています

この問題を解決するにはどうすればよいですか?

+0

ジョブのソースと例外の完全なスタックトレースを表示できますか? – sisve

+0

@sisve私は 'SomeJob'オブジェクトを作成しているので、' dispatch() 'を使っても問題はありませんが、phpunit経由でテストすると問題が発生します'dispatch() 'を使用するのではなく、 –

答えて

1

コードには$this->job->getJobId()が使用されていますが、そのプロパティは宣言または設定されていません。おそらくInteractsWithQueue特性を使用していますが、コードペーストにそれを含めるのを忘れていましたか?

この場合、ジョブプロパティはInteractsWithQueue::setJobに設定されています。このメソッドはいくつかの場所から呼び出すことができますが、おそらくIlluminate\Queue\CallQueuedHandler::setJobInstanceIfNecessaryです。これはLaravelがあなたの仕事を内部で初期化するためのもので、テスト環境で真似する必要があります。

Illuminate\Contracts\Queue\Jobという単純なバージョンを実装し、$job->handle()を呼び出す前に$job->setJob(new SimplisticVersionShazaamJob(...));を呼び出します。

+0

' InteractsWithQueue'はすでに 'Job'抽象クラスのLumenに含まれています。 https://github.com/laravel/lumen/blob/master/app/Jobs/Job.php –

+0

@ I'll-Be-BackなぜLaravel 5.5としてタグ付けされたのですか?Laravelについて話しましたか? –

+0

@MarcinNabiałek私のところに間違いがあります。 「InteractsWithQueue」も既に含まれています。問題は解決しません。だから私は '$ job-> setJob()'を使って@sisveの提案をテストしています。 –