Метод assertResponseRedirects
Метод assertResponseRedirects из класса WebTestCase
проверяет, что полученный ответ является HTTP-редиректом.
Первым параметром передаётся ожидаемый URL перенаправления,
вторым - ожидаемый код статуса (по умолчанию 302).
Если URL не указан, метод проверяет лишь сам факт редиректа.
Синтаксис
assertResponseRedirects(?string $expectedLocation = null, ?int $expectedCode = null)
Пример
Давайте создадим контроллер, который выполняет редирект
с адреса '/old' на адрес '/new':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/old', name: 'article_old')]
public function old(): RedirectResponse
{
return $this->redirectToRoute('article_new');
}
#[Route('/new', name: 'article_new')]
public function new(): RedirectResponse
{
return $this->redirect('/hello');
}
}
?>
Теперь напишем тест, который проверяет редирект:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testRedirect(): void
{
$client = static::createClient();
$client->request('GET', '/old');
$this->assertResponseRedirects('/new');
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Пример
Давайте проверим редирект с конкретным кодом статуса 301:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testPermanentRedirect(): void
{
$client = static::createClient();
$client->request('GET', '/old');
$this->assertResponseRedirects('/new', 302);
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Пример
Если нужно проверить только факт редиректа без указания URL, достаточно вызвать метод без параметров:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testAnyRedirect(): void
{
$client = static::createClient();
$client->request('GET', '/old');
$this->assertResponseRedirects();
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Смотрите также
-
метод
followRedirect,
который переходит по редиректу -
метод
assertResponseStatusCodeSame,
который проверяет код статуса ответа -
метод
assertResponseIsSuccessful,
который проверяет успешность ответа -
класс
WebTestCase,
который предоставляет методы для тестирования