Метод submit класса HttpBrowser
Метод submit класса HttpBrowser
отправляет форму на сервер. Первым параметром
передаётся объект формы Form, вторым -
массив значений полей формы. После отправки
браузер переходит по адресу действия формы
и возвращает объект Crawler с ответом.
Синтаксис
$browser->submit(Form $form, array $values = [])
Пример
Давайте получим форму по имени article и отправим её:
<?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 $this->render('article/index.html.twig');
}
}
?>
Теперь напишем тест, который находит форму и отправляет её:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testSubmit(): void
{
$client = static::createClient();
$crawler = $client->request('GET', '/article');
$form = $crawler->selectButton('submit')->form();
$crawler = $client->submit($form, [
'name' => 'abcde',
]);
$this->assertResponseIsSuccessful();
}
}
?>
Пример
Давайте отправим форму с несколькими полями и проверим результат:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testSubmitFields(): void
{
$client = static::createClient();
$crawler = $client->request('GET', '/article');
$form = $crawler->selectButton('save')->form();
$crawler = $client->submit($form, [
'name' => 'article',
'text' => 'hello',
'active' => true,
]);
$this->assertSelectorTextContains('h1', 'article');
}
}
?>
Результат выполнения кода:
"article"
Смотрите также
-
класс
HttpBrowser,
который имитирует браузер в тестах -
метод
request,
который выполняет HTTP-запрос -
метод
click,
который кликает по ссылке -
метод
followRedirect,
который следует по редиректу