Метод assertResponseIsSuccessful
Метод assertResponseIsSuccessful из класса WebTestCase проверяет, что полученный HTTP-ответ имеет успешный статусный код. Успешными считаются коды в диапазоне от 200 до 299. Если статусный код ответа не входит в этот диапазон, тест завершается ошибкой с сообщением о фактическом коде ответа. Метод не принимает параметров и вызывается после выполнения запроса через клиент.
Синтаксис
$this->assertResponseIsSuccessful();
Пример
Давайте создадим тест, который проверяет, что главная страница возвращает успешный ответ:
<?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', '/');
$this->assertResponseIsSuccessful();
}
}
?>
Если контроллер главной страницы возвращает ответ со статусом 200, тест пройдёт успешно. Если статус отличается, например 500, тест завершится ошибкой.
Пример
Давайте создадим контроллер, который возвращает ответ со статусом 200, и проверим его:
<?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('article');
}
}
?>
Теперь напишем тест для этого контроллера:
<?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->assertResponseIsSuccessful();
}
}
?>
Результат выполнения теста:
php bin/phpunit tests/Controller/ArticleControllerTest.php
Тест пройдёт успешно, так как статусный код ответа равен 200:
"OK (1 test, 1 assertion)"
Пример
Давайте создадим контроллер, который возвращает ответ со статусом 404, и проверим его:
<?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('not found', Response::HTTP_NOT_FOUND);
}
}
?>
Теперь напишем тест, который ожидает успешный ответ:
<?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->assertResponseIsSuccessful();
}
}
?>
Результат выполнения теста:
php bin/phpunit tests/Controller/ArticleControllerTest.php
Тест завершится ошибкой, так как статусный код ответа равен 404:
Пример
Давайте проверим успешность ответа для страницы, которая принимает параметр из 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('/user/{name}', name: 'article_user')]
public function user(string $name): Response
{
return new Response($name);
}
}
?>
Теперь напишем тест для адреса /user/abcde:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testUser(): void
{
$client = static::createClient();
$client->request('GET', '/user/abcde');
$this->assertResponseIsSuccessful();
}
}
?>
Результат выполнения теста:
php bin/phpunit tests/Controller/ArticleControllerTest.php
Тест пройдёт успешно, так как статусный код ответа равен 200:
Смотрите также
-
метод
assertResponseStatusCodeSame,
который проверяет конкретный статусный код ответа -
метод
assertResponseRedirects,
который проверяет перенаправление ответа -
метод
request,
который выполняет HTTP-запрос в тесте -
метод
getResponse,
который возвращает объект ответа после запроса