問題
LaravelでArtisan::queue()が呼ばることをテストしたい。
環境
- Laravel 6
対策
Queue::fake()メソッドを使用し、ジョブをテストできるようにする。
use Illuminate\Support\Facades\Queue;
Queue::fake();
Queue::assertPushed()メソッドを使用して、ジョブが正しくキューに入っているかどうかを検証する。
ソースコードを調べたところ、キューに登録されるクラスはQueuedCommandクラスのようなので、ジョブにQueuedCommandクラスが登録されているか検証する。
use Illuminate\Foundation\Console\QueuedCommand;
Queue::assertPushed(QueuedCommand::class);
サンプルコード
テストするコントローラクラス
class ImportController extends Controller
{
public function import(): RedirectResponse
{
Artisan::queue('import');
return back();
}
}
テストコード
class ImportTest extends TestCase
{
public function testImport()
{
Queue::fake();
Queue::assertNothingPushed();
$this->post(route('import'));
Queue::assertPushed(QueuedCommand::class);
}
}