むにえる牧場

毎日むにえるをつくっています

【Laravel】テスト中にRoutingを追加する

はじめに

Laravelでテストコードを書く際に、テスト中に Routing を追加したい場面に出くわしました。
そんなコードの備忘録記事です。

version は Laravel 5.6 利用です。

テスト中に Routing を追加する

単刀直入に、コード上でRoutingを追加するコードはこちら

public function registerRoute($method, $route, $middleware, $closure = null)
{
    if (is_string($m)) {
        $m = [$m];
    }

    $middleware = collect(['web'])->merge($m)->toArray();

    if (isset($closure)) {
        app('router')->match($method, $route, $closure)->middleware($middleware);
    } else {
        app('router')->match($method, $route, [function () {
            return view('layouts.app');
        }])->middleware($middleware);
    }
}

Laravel Router

Laravel 5.8のコードですが、こちらにRouterクラスがあります。

framework/Router.php at 5.8 · laravel/framework · GitHub

今回利用したmatchメソッド以外にもいろいろとpublicになってるので、結構何かと弄れそうな雰囲気

テストでの利用法

テストコード側からの利用はこんな感じに

$this->registerTestRoute('GET', "/test/{test_id}", ['middleware'], function () {
    return 'test view';
});

$response = $this->get('test/1');

$response->assertStatus(200);