This is how I usually test that kind of middleware.
<?php
namespace Tests\Feature\Http;
use Tests\TestCase;
class AuthorizationTest extends TestCase
{
public function protectedRoutesProvider(): array
{
return [
'Authors: a guest is not authorized to visit the create page' => ['get', '/authors/create'],
'Authors: a guest is not authorized to visit the edit page' => ['get', '/authors/1/edit'],
'Authors: a guest is not authorized to visit the update page' => ['put', '/authors/1'],
'Books: a guest is not authorized to visit the create page' => ['get', '/books/create'],
'Books: a guest is not authorized to visit the edit page' => ['get', '/books/1/edit'],
'Books: a guest is not authorized to visit the store page' => ['post', '/books'],
'Books: a guest is not authorized to visit the update page' => ['put', '/books/1'],
'Books: a guest is not authorized to visit the delete page' => ['delete', '/books/1'],
];
}
/**
* @test
* @dataProvider protectedRoutesProvider
* @param $method
* @param $route
*/
public function guests_are_redirected_to_login($method, $route): void
{
$response = $this->$method($route);
$response->assertLocation('/login');
}
}