Help us understand the problem. What is going on with this article?

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

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

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした