我如何测试一个 Laravel 作业在测试时派遣另一个作业?
How I can test that one Laravel job dispatches an another one on testing?
我有以下 Laravel 工人:
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use App\Lobs\AnotherJob;
class MyWorker implements ShouldQueue
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
public function handle(): void
{
AnotherJob::dispatch();
}
}
我想对我的工作调度 AnotherJob
:
进行单元测试
namespace Tests;
use Illuminate\Foundation\Testing\TestCase;
class TestMyWorker extends TestCase
{
public function testDispachesAnotherJob()
{
MyWorker::dispatchNow();
//Assert that AnotherJob is dispatched
}
}
你知道我怎么知道 AnotherJob::dispatch()
确实被调用了吗?
Laravel 有 queue mocks/fakes 可以处理。试试这个:
namespace Tests;
use Illuminate\Foundation\Testing\TestCase;
use Illuminate\Support\Facades\Queue;
use App\Jobs\MyWorker;
use App\Jobs\AnotherJob;
class TestMyWorker extends TestCase
{
public function testDispachesAnotherJob()
{
Queue::fake();
MyWorker::dispatchNow();
Queue::assertPushed(MyWorker::class);
Queue::assertPushed(AnotherJob::class);
}
}
我有以下 Laravel 工人:
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use App\Lobs\AnotherJob;
class MyWorker implements ShouldQueue
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
public function handle(): void
{
AnotherJob::dispatch();
}
}
我想对我的工作调度 AnotherJob
:
namespace Tests;
use Illuminate\Foundation\Testing\TestCase;
class TestMyWorker extends TestCase
{
public function testDispachesAnotherJob()
{
MyWorker::dispatchNow();
//Assert that AnotherJob is dispatched
}
}
你知道我怎么知道 AnotherJob::dispatch()
确实被调用了吗?
Laravel 有 queue mocks/fakes 可以处理。试试这个:
namespace Tests;
use Illuminate\Foundation\Testing\TestCase;
use Illuminate\Support\Facades\Queue;
use App\Jobs\MyWorker;
use App\Jobs\AnotherJob;
class TestMyWorker extends TestCase
{
public function testDispachesAnotherJob()
{
Queue::fake();
MyWorker::dispatchNow();
Queue::assertPushed(MyWorker::class);
Queue::assertPushed(AnotherJob::class);
}
}