Метод assertGuest
Метод assertGuest предназначен для проверки в тестах,
что пользователь не авторизован в приложении. Данный метод
доступен в тестовых классах, наследующихся от TestCase.
Он проверяет, что в сессии отсутствует аутентифицированный
пользователь и не установлен guard-провайдер. Метод полезен
при тестировании страниц входа, выхода из системы и защищённых
маршрутов.
Метод assertGuest может принимать необязательный
параметр - имя guard-провайдера. Если guard не указан,
используется драйвер аутентификации по умолчанию.
Синтаксис
<?php
$this->assertGuest($guard = null);
?>
Пример
Давайте протестируем страницу входа до авторизации:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
class LoginTest extends TestCase
{
public function test_guest_can_view_login_page()
{
$response = $this->get('/login');
$response->assertStatus(200);
$this->assertGuest();
}
}
?>
Результат выполнения кода:
"Test passed: user is not authenticated"
Пример
Давайте проверим, что после выхода из системы пользователь становится гостем:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
class LogoutTest extends TestCase
{
public function test_user_can_logout()
{
$user = User::factory()->create();
$this->actingAs($user)
->post('/logout')
->assertRedirect('/login');
$this->assertGuest();
}
}
?>
Результат выполнения кода:
"Test passed: user successfully logged out"
Пример
Проверим, что защищённая страница недоступна для гостя:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class DashboardTest extends TestCase
{
public function test_guest_cannot_access_dashboard()
{
$response = $this->get('/dashboard');
$response->assertRedirect('/login');
$this->assertGuest();
}
}
?>
Результат выполнения кода:
"Test passed: guest redirected to login page"
Пример с указанием guard
При использовании нескольких guard-провайдеров можно указать конкретный guard для проверки:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Admin;
class AdminAuthTest extends TestCase
{
public function test_admin_guard_is_not_authenticated()
{
$this->assertGuest('admin');
$admin = Admin::factory()->create();
$this->actingAs($admin, 'admin');
$this->assertAuthenticated('admin');
}
}
?>
Результат выполнения кода:
"Test passed: admin guard verification works correctly"
Смотрите также
-
метод
assertAuthenticated,
который проверяет, что пользователь авторизован -
метод
assertAuthenticatedAs,
который проверяет авторизацию конкретного пользователя -
метод
actingAs,
который устанавливает текущего пользователя для тестов -
класс
TestCase,
который является базовым классом для всех тестов Laravel