Laravel 6.x: Routeのテスト (各URL毎に期待したアクションが実行されるかどうか)

2020/09/11 追記: 別の方法 に変更しました。

sample

final class XxxxRouterTest extends TestCase
{
    public function RouteActionNameDataProvider()
    {
        return [
            [
                'get',
                '/user/1', //テスト対象のURL
                UserViewController::class, //URLをリクエストした際に、期待されるアクション名
                'user.view' //URLをリクエストした際に、期待されるルート名
            ],
            [
                'post',
                '/user/add',
                UserAddController::class,
                'user.add'
            ],
        ];
    }

    /**
     * @dataProvider RouteActionNameDataProvider
     * @param $method
     * @param $url
     * @param $expectedActionName
     * @param $expectedRouteName
     */
    public function testRouteActionName(
        $method,
        $url,
        $expectedActionName,
        $expectedRouteName
    ) {
        // 特定のテストでのみミドルウェアを無効化
        $this->withoutMiddleware();

        switch ($method) {
            case 'post':
                $this->post($url);
                break;
            case 'get':
                $this->get($url);
                break;
            default:
                $this->get($url);
        }

        $this->assertEquals($expectedRouteName, Route::currentRouteName());
        $this->assertEquals($expectedActionName, Route::currentRouteAction());
    }