Метод withSession
Метод withSession применяется к HTTP-клиенту в тестах Laravel и позволяет установить произвольные данные в сессию перед отправкой запроса. Метод принимает ассоциативный массив, где ключи - это имена переменных сессии, а значения - их содержимое. Данный метод часто используется для тестирования функциональности, зависящей от состояния сессии, например, корзины покупок, flash-сообщений или аутентификации.
Синтаксис
<?php
$this->withSession($data)->get($uri);
?>
Пример
Давайте протестируем страницу профиля, которая требует наличия определенного ключа в сессии:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ProfileTest extends TestCase
{
public function test_profile_page_requires_session_data()
{
$sessionData = ['user_id' => 1, 'role' => 'admin'];
$res = $this->withSession($sessionData)
->get('/profile');
$res->assertStatus(200);
}
}
?>
Пример
Теперь установим несколько значений сессии для тестирования корзины покупок:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class CartTest extends TestCase
{
public function test_cart_page_displays_correct_items()
{
$cartItems = [
'cart' => [
['id' => 1, 'name' => 'Product A', 'price' => 100],
['id' => 2, 'name' => 'Product B', 'price' => 200],
],
'total' => 300,
];
$res = $this->withSession($cartItems)
->get('/cart');
$res->assertSee('Product A');
$res->assertSee('Product B');
$res->assertSee('$300.00');
}
}
?>
Пример
Также можно использовать withSession для эмуляции flash-сообщений, которые обычно хранятся в сессии:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class FlashMessageTest extends TestCase
{
public function test_flash_message_is_displayed_on_page()
{
$flashData = [
'_flash' => [
'old' => [],
'new' => ['message' => 'Profile updated successfully'],
],
'message' => 'Profile updated successfully',
];
$res = $this->withSession($flashData)
->get('/dashboard');
$res->assertSee('Profile updated successfully');
}
}
?>
Смотрите также
-
метод
actingAs,
который устанавливает аутентифицированного пользователя -
метод
withHeaders,
который добавляет заголовки к запросу -
метод
withoutMiddleware,
который отключает middleware для тестирования -
метод
assertSessionHas,
который проверяет наличие данных в сессии