web-dev-qa-db-ja.com

Laravel 5つのジョブをテストする方法は?

仕事が終わったらイベントをキャッチしよう

テストコード:

_class MyTest extends TestCase {

   public function testJobsEvents ()
   {
           Queue::after(function (JobProcessed $event) {
               // if ( $job is 'MyJob1' ) then do test
               dump($event->job->payload());
               $event->job->payload()
           });
           $response = $this->post('/api/user', [ 'test' => 'data' ], $this->headers);
           $response->assertSuccessful($response->isOk());

   }

}
_

serControllerのメソッド:

_public function userAction (Request $request) {

    MyJob1::dispatch($request->toArray());
    MyJob2::dispatch($request->toArray());
    return response(null, 200);
}
_

私の仕事:

_class Job1 implements ShouldQueue {
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

     public $data = [];

     public function __construct($data)
     {
         $this->data= $data;
     }

      public function handle()
      {
          // Process uploaded
      }
}
_

ジョブが完了した後にいくつかのデータをチェックする必要がありますが、_Queue::after_の$event->job->payload()からシリアル化されたデータを取得します。ジョブをチェックする方法がわかりませんか?

4
coder fire

handleメソッド内のロジックをテストするには、ジョブクラスをインスタンス化し、handleメソッドを呼び出す必要があります。

public function testJobsEvents()
{
       $job = new \App\Jobs\YourJob;
       $job->handle();

       // Assert the side effect of your job...
}

結局のところ、仕事は単なるクラスであることを忘れないでください。

24

同期ディスパッチ

ジョブをすぐに(同期して)ディスパッチしたい場合は、dispatchNowメソッドを使用できます。この方法を使用する場合、ジョブはキューに入れられず、現在のプロセス内ですぐに実行されます。

Job::dispatchNow()

1
sumeet