Новое в Symfony 6.4: Больше тестируемых утверждений
Symfony предоставляет пользовательские утверждения для упрощения работы с тестами. Они необязательны, но мы рекомендуем использовать их, для облегчения сопровождения тестов. Например:
// с утверждениями PHPUnit по умолчанию
$this->assertSame(
'This is not a valid coupon code.',
trim($crawler->filter('#errorMessages')->text())
);
// с пользовательскими утверждениями Symfony
$this->assertSelectorTextContains('#errorMessages', 'This is not a valid coupon code.');
В Symfony 6.4 мы вводим новые пользовательские утверждения.
Утверждения любого селектора
Рассмотрим следующий HTML-код:
<ul>
<li>test 1</li>
<li>test 2</li>
<li>test 3</li>
</ul>
Если необходимо протестировать, что любой из элементов <li>
содержит текст test 3
, то необходимо перебрать все элементы <li>
или извлечь все их содержимое:
$nodes = $crawler->filter('ul li')->each(fn(Crawler $node) => $node->text());
$this->assertContains('test3', $nodes);
В Symfony 6.4 можно использовать новые утверждения:
$this->assertAnySelectorTextSame('ul li', 'test 3');
$this->assertAnySelectorTextContains('ul li', 'test');
Утверждения HttpClient
- Pull Request: [FrameworkBundle] Add HttpClientAssertionsTrait which provide shortcuts to assert HTTP calls was triggered #50662 Mathieu Santostefano
В Symfony 6.4 также добавлено несколько утверждений, гарантирующих, что определённые HTTP-вызовы были инициированы (через компонент HttpClient
) во время выполнения приложения:
// method arguments: (string) URL, (string) method, (string|array) body, (array) $headers, (string) http_client ID
$this->assertHttpClientRequest('https://example.com/', 'GET');
$this->assertHttpClientRequest('https://example.com/upload', 'POST', ['foo' => 'bar']);
// method arguments: (string) URL, (string) method, (string) http_client ID
$this->assertNotHttpClientRequest('https://example.com/other');
// method arguments: (int) count, (string) http_client ID
$this->assertHttpClientRequestCount(2);
Утверждения темы электронной почты
- Pull Request: [Mailer] Adds assertEmailSubjectContains and assertEmailSubjectNotContains methods #50200 Johan Vlaar
Symfony уже предоставляет множество утверждений, связанных с мейлером, таких, как assertEmailCount()
, assertEmailTextBodyContains()
, assertEmailHasHeader()
и т.д. В Symfony 6.4 мы добавляем два новых утверждения, связанных с темами электронных писем:
$this->assertEmailSubjectContains($email, 'Your order was processed successfully');
$this->assertEmailSubjectNotContains($email, 'Your order is pending');