Метод submitForm класса KernelBrowser
Метод submitForm класса KernelBrowser используется в функциональных тестах Symfony для отправки HTML-формы. Первым параметром передаётся объект Form или CSS-селектор формы, вторым - массив значений полей, третьим - массив файлов. Метод возвращает объект Crawler с ответом сервера.
Синтаксис
$res = $browser->submitForm(Form $form, array $values = [], array $files = []);
Пример
Давайте создадим форму для добавления статьи и отправим её в тесте:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/new', name: 'article_new')]
public function new(Request $request): Response
{
if ($request->isMethod('POST')) {
return new Response('article created');
}
return $this->render('article/new.html.twig');
}
}
?>
Шаблон с формой:
<form method="post" action="/article/new">
<input type="text" name="title" value="">
<input type="text" name="text" value="">
<button type="submit">save</button>
</form>
Теперь напишем тест, который отправляет эту форму:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testSubmitForm(): void
{
$client = static::createClient();
$crawler = $client->request('GET', '/article/new');
$form = $crawler->selectButton('save')->form();
$client->submitForm($form, [
'title' => 'abcde',
'text' => 'hello',
]);
$this->assertResponseIsSuccessful();
}
}
?>
Пример
Давайте отправим форму, выбрав её по CSS-селектору:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testSubmitBySelector(): void
{
$client = static::createClient();
$client->request('GET', '/article/new');
$client->submitForm('form', [
'title' => 'abcde',
'text' => 'hello',
]);
$res = $client->getResponse()->getContent();
$this->assertSame('article created', $res);
}
}
?>
Результат выполнения кода:
"article created"
Смотрите также
-
метод
submit,
который отправляет форму по кнопке -
метод
getCrawler,
который возвращает объект Crawler -
метод
getResponse,
который возвращает ответ сервера -
класс
KernelBrowser,
который используется для тестирования приложения