如何测试Laravel 5的工作?

时间:2017-10-19 19:12:34

标签: php laravel phpunit laravel-queue

我尝试在工作完成时抓住一个事件

测试代码:

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());

   }

}
UserController 中的

方法:

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
      }
}

我需要在作业完成后检查一些数据,但我从中获取了序列化数据 $event->job->payload()中的Queue::after而且我不明白如何查看工作?

2 个答案:

答案 0 :(得分:13)

那么,要测试handle方法中的逻辑,您只需要实例化作业类&调用handle方法。

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

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

记住,毕竟工作只是一个班级。

答案 1 :(得分:1)

同步调度

如果您想立即(同步)调度作业,则可以使用dispatchNow方法。使用此方法时,该作业将不会排队,并将在当前进程中立即运行:

Job::dispatchNow()