РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1227 of 1392 menu

Метод 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
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить