Symfony 4.2 выйдет в ноябре 2018 года. Это первая статья из серии, в которой показаны наиболее важные новые функции, представленные в этой версии Symfony.

Предоставил
Виктор Новиков
в #27807.

В приложениях Symfony функциональные тесты используют клиент на основе PHP, предоставляемый компонентом BrowserKit, для имитации браузера и выполнения HTTP-запросов. В Symfony 4.2 мы представили новые вспомогательные методы в этом клиенте, чтобы упростить действия по переходу по ссылкам и отправке форм.

Сначала помощник clickLink() щелкает первую ссылку, содержащую данный текст (или первое кликабельное изображение, чей атрибут alt содержит данный текст):

// Before
$client->request('GET', '/');
$link = $crawler->selectLink('Login')->link();
$crawler = $client->click($link);

// After
$client->request('GET', '/');
$crawler = $client->clickLink('Login');

Предыдущий способ работы со ссылками (с методами selectLink() и click()) по-прежнему работает, и вам нужно будет использовать его в более сложных сценариях (например, когда вам нужно получить доступ к какому-либо атрибуту ссылки, прежде чем щелкнуть ее).

Другой новый помощник называется submitForm(), который находит первую форму, содержащую кнопку с заданным текстом (или id, value или name), и использует ее для отправки заданных значений полей формы:

// Before
$client->request('GET', '/register');
$form = $crawler->selectButton('Sign Up')->form();
$crawler = $client->submit($form, [
    'name' => 'Jane Doe',
    'username' => 'jane',
    'password' => 'my safe password',
]);

// After
$client->request('GET', '/register');
$crawler = $client->submitForm('Sign Up', [
    'name' => 'Jane Doe',
    'username' => 'jane',
    'password' => 'my safe password',
]);

Предыдущий способ работы с формами (с методами selectButton() и submit()) по-прежнему работает, и вам придется использовать его в более сложных сценариях (например, когда вам нужно получить доступ к какому-либо атрибуту формы перед ее отправкой).

Наконец, если вы хотите запустить свои функциональные тесты в реальном браузере, а не в симулированном браузере, попробуйте Symfony Panther, последнее дополнение к экосистеме Symfony. Одним из его самых больших преимуществ является то, что он использует тот же API, что и BrowserKit, поэтому эти новые помощники могут быть доступны в Panther в ближайшее время.