Класс HttpBrowser
Класс HttpBrowser используется в функциональных тестах
Symfony для эмуляции поведения браузера. Он позволяет
отправлять HTTP-запросы к приложению, переходить по ссылкам,
отправлять формы и следовать редиректам без запуска реального
веб-сервера. В отличие от KernelBrowser, класс
HttpBrowser работает как самостоятельный HTTP-клиент
и может использоваться вне контекста WebTestCase.
Первым параметром конструктор принимает экземпляр
HttpKernelInterface, который будет обрабатывать запросы.
Синтаксис
use Symfony\Component\HttpKernel\HttpBrowser;
$browser = new HttpBrowser($kernel);
$crawler = $browser->request('GET', 'https://example.com/');
Пример
Давайте создадим экземпляр HttpBrowser и выполним
GET-запрос к тестовому приложению:
<?php
namespace App\Tests;
use App\Kernel;
use Symfony\Component\HttpKernel\HttpBrowser;
use PHPUnit\Framework\TestCase;
class HttpBrowserTest extends TestCase
{
public function testIndex(): void
{
$kernel = new Kernel('test', true);
$browser = new HttpBrowser($kernel);
$crawler = $browser->request('GET', 'https://example.com/');
$this->assertSame(200, $browser->getResponse()->getStatusCode());
$this->assertStringContainsString('hello', $browser->getResponse()->getContent());
}
}
?>
Результат выполнения кода при успешном тесте:
OK (1 test, 2 assertions)
Пример
Давайте отправим POST-запрос с параметрами формы через
HttpBrowser:
<?php
namespace App\Tests;
use App\Kernel;
use Symfony\Component\HttpKernel\HttpBrowser;
use PHPUnit\Framework\TestCase;
class HttpBrowserPostTest extends TestCase
{
public function testSubmit(): void
{
$kernel = new Kernel('test', true);
$browser = new HttpBrowser($kernel);
$crawler = $browser->request('POST', 'https://example.com/user', [
'name' => 'abcde',
]);
$this->assertSame(200, $browser->getResponse()->getStatusCode());
$this->assertSame('abcde', $browser->getResponse()->getContent());
}
}
?>
Результат выполнения кода при успешном тесте:
OK (1 test, 2 assertions)
Пример
Давайте перейдём по ссылке на странице с помощью метода
click и проверим содержимое ответа:
<?php
namespace App\Tests;
use App\Kernel;
use Symfony\Component\HttpKernel\HttpBrowser;
use PHPUnit\Framework\TestCase;
class HttpBrowserClickTest extends TestCase
{
public function testClickLink(): void
{
$kernel = new Kernel('test', true);
$browser = new HttpBrowser($kernel);
$crawler = $browser->request('GET', 'https://example.com/');
$link = $crawler->selectLink('article')->link();
$crawler = $browser->click($link);
$this->assertSame(200, $browser->getResponse()->getStatusCode());
$this->assertStringContainsString('article', $browser->getResponse()->getContent());
}
}
?>
Результат выполнения кода при успешном тесте:
OK (1 test, 2 assertions)
Пример
Давайте отправим форму через метод submit и проверим
редирект:
<?php
namespace App\Tests;
use App\Kernel;
use Symfony\Component\HttpKernel\HttpBrowser;
use PHPUnit\Framework\TestCase;
class HttpBrowserSubmitTest extends TestCase
{
public function testSubmitForm(): void
{
$kernel = new Kernel('test', true);
$browser = new HttpBrowser($kernel);
$crawler = $browser->request('GET', 'https://example.com/form');
$form = $crawler->selectButton('submit')->form();
$form['name'] = 'abcde';
$crawler = $browser->submit($form);
$this->assertSame(302, $browser->getResponse()->getStatusCode());
$this->assertTrue($browser->getResponse()->isRedirect());
}
}
?>
Результат выполнения кода при успешном тесте:
OK (1 test, 2 assertions)
Смотрите также
-
метод
request,
который выполняет HTTP-запрос через браузер -
метод
click,
который переходит по ссылке на странице -
метод
submit,
который отправляет форму через браузер -
метод
followRedirect,
который следует по редиректу ответа