仕事が終わったらイベントをキャッチしよう
テストコード:
_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()
からシリアル化されたデータを取得します。ジョブをチェックする方法がわかりませんか?
handle
メソッド内のロジックをテストするには、ジョブクラスをインスタンス化し、handle
メソッドを呼び出す必要があります。
public function testJobsEvents()
{
$job = new \App\Jobs\YourJob;
$job->handle();
// Assert the side effect of your job...
}
結局のところ、仕事は単なるクラスであることを忘れないでください。
同期ディスパッチ
ジョブをすぐに(同期して)ディスパッチしたい場合は、dispatchNowメソッドを使用できます。この方法を使用する場合、ジョブはキューに入れられず、現在のプロセス内ですぐに実行されます。
Job::dispatchNow()