Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@gomaaa

Route Model Bindingしているルートに対してテストするときのコツ

More than 1 year has passed since last update.

HTTPテストを書くとき
ミドルウェアを無効化したほうが都合がいい時があるかと思います
(公式: https://readouble.com/laravel/5.1/ja/testing.html#disabling-middleware )

そんなとき
use WithoutMiddleware;
とかしてミドルウェアを全部無効化しちゃうという対応をされることも珍しくないと思います。

ですが、これが
Route Model Bindingしているルートに対してHTTPテスト
となると、ひと手間必要だったのでメモっときます

Route Model Bindingしているルートに対してHTTPテストを書くとき

route('user.update', $user->id)
web.phpにて

Route::patch('{user}/update', 'UserController@update');

と定義されたルートであることを仮定します

順当に書くとしたら


    use WithoutMiddleware;

    public function testUpdate()
    {
        $user = User::find(1);
        $response = $this->actingAs($user)
            ->patch(route('user.update', $user->id), ['name' => 'taro' ]);
    }

こうなんですが、これだとRoute Model Bindingされません

Route Model Binding自体が何かしらのmiddlewareを使って機能しているからだ、と思われます

なので最小限のミドルウェアのみを無効化して対応しましょう


    use WithoutMiddleware;

    public function testUpdate()
    {
        // ルートモデルバインディングをしているので、対応するため無効化するミドルウェアを最小限にする
        $this->withMiddleware();
        $this->withoutMiddleware([VerifyCsrfToken::class, Authenticate::class]);

        $user = User::find(1);
        $response = $this->actingAs($user)
            ->patch(route('user.update', $user->id), ['name' => 'taro' ]);
    }

参考: https://github.com/laravel/framework/issues/16260

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
gomaaa
仕事でPHP、気持ちはPerl、時々JS勉強中。言語処理の話を聞くとテンション上がる

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?