2016-08-15 20 views
1

私のアプリケーションの統合テストを実行しようとしています。Laravel統合テストジョブ

  • StartJob
  • PrepareJob
  • PeformJob

StartJobはPrepareJobは、すべてのPrepareJobは1 PerformJobをディスパッチ一つ以上をディスパッチ:私はそれらの仕事を持っています。この

$this->expectsJobs(
     [ 
      StartJobs::class, 
      PrepareJob::class, 
      PerformJob::class 
     ] 
    ); 

を追加

は私のテストでの$ this - を削除

1) JobsTest::testJobs 
BadMethodCallException: Method Mockery_0_Illuminate_Contracts_Bus_Dispatcher::dispatchNow() does not exist on this mock object 

をというエラーで失敗します> expectsJobsすべての私のテストに合格なりますが、私は与えられたジョブが実行された主張することはできませんそれはDBを特定の状態に変更したかどうかだけです。

StartJobs.php

class StartJobs extends Job implements ShouldQueue 
    { 
     use InteractsWithQueue; 
     use DispatchesJobs; 

     public function handle(Writer $writer) 
     { 
      $writer->info("[StartJob] Started"); 

      for($i=0; $i < 5; $i++) 
      { 
       $this->dispatch(new PrepareJob()); 
      } 

      $this->delete(); 
     } 

    } 

PrepareJob.php

class PrepareJob extends Job implements ShouldQueue 
{ 
    use InteractsWithQueue; 
    use DispatchesJobs; 

    public function handle(Writer $writer) 
    { 
     $writer->info("[PrepareJob] Started"); 

     $this->dispatch(new PerformJob()); 

     $this->delete(); 
    } 

} 

PerformJob.php

class PerformJob extends Job implements ShouldQueue 
{ 
    use InteractsWithQueue; 

    public function handle(Writer $writer) 
    { 
     $writer->info("[PerformJob] Started"); 

     $this->delete(); 
    } 
} 

JobsTest.php

class JobsTest extends TestCase 
{ 
    /** 
    * @var Dispatcher 
    */ 
    protected $dispatcher; 

    protected function setUp() 
    { 
     parent::setUp(); 
     $this->dispatcher = $this->app->make(Dispatcher::class); 
    } 

    public function testJobs() 
    { 
     $this->expectsJobs(
      [ 
       StartJobs::class, 
       PrepareJob::class, 
       PerformJob::class 
      ] 
     ); 

     $this->dispatcher->dispatch(new StartJobs()); 
    } 
} 

私は具体的なディスパッチャーを使って何かをしなければならないと思いますが、$ this-> expectsJobはディスパッチャーをモックします。これに関連するかもしれません - https://github.com/laravel/lumen-framework/issues/207。これを解決する方法は何ですか?

+0

あなたは私たちにコードを表示できますか? –

+0

@AngadDubey私は、コードがそれほど単純化していると思っていましたが、それを投稿する際には何のポイントもありませんでした。しかし、私は簡単な仕事とテストを書いている間、私は問題の根源を見つけました。私はすべてのコードサンプルと観測結果を使って投稿を修正しました –

答えて

0

私にはdispatchNow() - メソッドがないようです。ジョブでは、dispatch()を実行しますが、エラーはdispatchNow()が存在しないことを示します。

Laravelは特定のバージョン(私はLaravel 5.2とは思えないとは思えません)の前にdispatchNow()メソッドを持っていませんでしたが、dispatch()だけでした。 expectsJobsがそれについて考えることができず、失敗するかもしれません。

あなたは1つの配列にそれを渡していない試みるが、3つのコマンドを使用できます。

$this->expectsJobs(StartJobs::class); 
$this->expectsJobs(PrepareJob::class); 
$this->expectsJobs(PerformJob::class); 

多分に役立ちます。

関連する問題