Метод assertRouteSame
Метод assertRouteSame относится к секции
тестирования Symfony и вызывается внутри тестового
класса, унаследованного от WebTestCase.
Он проверяет, что последний выполненный запрос был
обработан именно тем маршрутом, имя которого
передано первым параметром. Вторым параметром
можно передать массив параметров маршрута, а
третьим - сообщение об ошибке. Если маршрут не
совпадает, тест завершается с ошибкой.
Синтаксис
assertRouteSame(string $expectedRoute, array $parameters = [], string $message = '')
Пример
Давайте создадим контроллер с маршрутом и проверим, что запрос обрабатывается именно этим маршрутом:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
return new Response('hello');
}
}
?>
Теперь напишем тест, который проверяет маршрут:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testIndex(): void
{
$client = static::createClient();
$client->request('GET', '/article');
$this->assertRouteSame('article_index');
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Пример
Давайте проверим маршрут с параметрами. Создадим контроллер, принимающий параметр из URL:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(int $id): Response
{
return new Response('article ' . $id);
}
}
?>
Напишем тест, который проверяет маршрут вместе с его параметрами:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testShow(): void
{
$client = static::createClient();
$client->request('GET', '/article/1');
$this->assertRouteSame('article_show', ['id' => 1]);
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Пример
Давайте разберём случай, когда маршрут не совпадает. Тест завершится ошибкой:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testIndex(): void
{
$client = static::createClient();
$client->request('GET', '/article');
$this->assertRouteSame('article_show');
}
}
?>
Результат выполнения теста:
"Failed asserting that the request matched the route 'article_show'."
Смотрите также
-
класс
WebTestCase,
который является базовым для функциональных тестов -
метод
createClient,
который создаёт клиента для выполнения запросов -
метод
request,
который выполняет запрос к приложению -
метод
assertResponseIsSuccessful,
который проверяет успешность ответа