Авторизация actingAs в тестах Laravel
Маршруты с middleware auth
для гостя недоступны: будет
редирект на логин. В тесте нельзя
каждый раз заполнять форму входа.
Нужен быстрый способ сказать:
«этот запрос от пользователя».
Метод actingAs($user)
подставляет пользователя в тест.
Пользователя обычно создают
фабрикой и сразу вызывают
защищённый маршрут:
<?php
namespace Tests\Feature;
use App\Models\User;
use Tests\TestCase;
class DashboardTest extends TestCase
{
public function test_dashboard_for_user(): void
{
$user = User::factory()->create();
$response = $this->actingAs($user)
->get('/dashboard');
$response->assertStatus(200);
}
}
?>
Цепочку пишут так:
$this->actingAs($user)->get(...).
Без actingAs тот же
get к закрытому URL
часто даст 302 на вход.
С actingAs - уже
ответ авторизованного пользователя.
Фабрика User::factory()->create()
здесь только подготовка: нужен
живой пользователь в базе теста.
Главное в уроке - сам
actingAs: от чьего имени
идёт запрос.
Создайте пользователя фабрикой
и сделайте actingAs.
Откройте закрытый маршрут
через get после
actingAs.
Что будет с тем же get
без actingAs?