LaravelのUnitTestでArtisan::queue()をテストする方法

問題

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください