Метод request класса HttpBrowser
Метод request класса HttpBrowser выполняет
HTTP-запрос к приложению и возвращает объект
Crawler с ответом. Первым параметром передаётся
HTTP-метод ('GET', 'POST' и так далее),
вторым - URL запрашиваемой страницы. Третьим параметром
можно передать массив параметров запроса, четвёртым -
массив серверных переменных, пятым - содержимое тела
запроса. Метод используется в функциональных тестах для
имитации действий пользователя.
Синтаксис
$browser->request(string $method, string $uri, array $parameters = [], array $server = [], string $content = null)
Пример
Давайте выполним GET-запрос к главной странице приложения:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testIndex(): void
{
$client = static::createClient();
$crawler = $client->request('GET', '/');
$this->assertResponseIsSuccessful();
$this->assertSelectorTextContains('h1', 'hello');
}
}
?>
Результат выполнения теста:
OK (1 test, 2 assertions)
Пример
Давайте выполним POST-запрос с параметрами формы:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testCreate(): void
{
$client = static::createClient();
$crawler = $client->request('POST', '/article/create', [
'title' => 'article',
'content' => 'abcde',
]);
$this->assertResponseIsSuccessful();
$this->assertSelectorTextContains('div', 'article');
}
}
?>
Результат выполнения теста:
OK (1 test, 2 assertions)
Пример
Давайте выполним запрос с пользовательскими заголовками:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testApi(): void
{
$client = static::createClient();
$crawler = $client->request('GET', '/api/articles', [], [
'HTTP_ACCEPT' => 'application/json',
'HTTP_AUTHORIZATION' => 'Bearer token',
]);
$this->assertResponseIsSuccessful();
$this->assertResponseFormatSame('json');
}
}
?>
Результат выполнения теста:
OK (1 test, 2 assertions)
Пример
Давайте выполним запрос с телом в формате JSON:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testJsonBody(): void
{
$client = static::createClient();
$crawler = $client->request(
'POST',
'/api/article',
[],
['CONTENT_TYPE' => 'application/json'],
'{"title":"article","content":"abcde"}'
);
$this->assertResponseIsSuccessful();
$this->assertSelectorTextContains('div', 'article');
}
}
?>
Результат выполнения теста:
OK (1 test, 2 assertions)
Смотрите также
-
класс
HttpBrowser,
который имитирует браузер в тестах -
метод
click,
который кликает по ссылке в тесте -
метод
submit,
который отправляет форму в тесте -
метод
followRedirect,
который следует по редиректу в тесте