Метод loginUser класса KernelBrowser
Метод loginUser класса KernelBrowser выполняет программную аутентификацию пользователя в тестах Symfony. Первым параметром передаётся объект пользователя (реализующий UserInterface), вторым - имя файрвола (по умолчанию 'main'). Метод возвращает текущий объект KernelBrowser для цепочки вызовов. После вызова все последующие запросы через request будут выполняться от имени указанного пользователя.
Синтаксис
$client->loginUser(UserInterface $user, string $firewallContext = 'main');
Пример
Давайте создадим тест, в котором аутентифицируем пользователя и проверим доступ к защищённой странице:
<?php
namespace App\Tests\Controller;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testLoginUser(): void
{
$client = static::createClient();
$user = new User();
$user->setEmail('user@example.com');
$user->setPassword('password');
$client->loginUser($user);
$client->request('GET', '/admin');
$this->assertResponseIsSuccessful();
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Пример
Давайте укажем конкретный файрвол при аутентификации:
<?php
namespace App\Tests\Controller;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class AdminControllerTest extends WebTestCase
{
public function testLoginUserWithFirewall(): void
{
$client = static::createClient();
$user = new User();
$user->setEmail('admin@example.com');
$user->setPassword('secret');
$client->loginUser($user, 'admin');
$client->request('GET', '/admin/dashboard');
$this->assertResponseIsSuccessful();
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Смотрите также
-
класс
KernelBrowser,
который эмулирует браузер в тестах -
метод
request,
который выполняет HTTP-запрос в тесте -
класс
WebTestCase,
который создаёт тестовый клиент -
метод
loginUser,
который аутентифицирует пользователя в WebTestCase