Метод assertSelectorTextNotContains
Метод assertSelectorTextNotContains относится к классу
WebTestCase и используется в функциональных тестах Symfony.
Он проверяет, что текст внутри HTML-элемента, найденного по
CSS-селектору, не содержит заданную подстроку.
Первым параметром передаётся CSS-селектор, вторым - искомая
подстрока, которая не должна встречаться в тексте элемента.
Если подстрока найдена - тест завершается ошибкой.
Метод удобен, когда нужно убедиться, что на странице отсутствует какой-либо текст: сообщение об ошибке, скрытые данные, нежелательные метки и так далее.
Синтаксис
assertSelectorTextNotContains(string $selector, string $text, string $message = '')
Пример
Давайте создадим контроллер, который выводит страницу
с заголовком 'hello':
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
return new Response('<h1>hello</h1>');
}
}
?>
Теперь напишем тест, который проверяет, что в заголовке
h1 нет подстроки 'error':
<?php
namespace AppTestsController;
use SymfonyBundleFrameworkBundleTestWebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testIndex(): void
{
$client = static::createClient();
$client->request('GET', '/article');
$this->assertSelectorTextNotContains('h1', 'error');
}
}
?>
Тест пройдёт успешно, так как текст 'hello' не содержит
подстроку 'error'.
Пример
Давайте рассмотрим случай, когда тест должен упасть. Изменим контроллер так, чтобы он выводил сообщение об ошибке:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
return new Response('<h1>error page</h1>');
}
}
?>
Теперь выполним тот же тест:
<?php
namespace AppTestsController;
use SymfonyBundleFrameworkBundleTestWebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testIndex(): void
{
$client = static::createClient();
$client->request('GET', '/article');
$this->assertSelectorTextNotContains('h1', 'error');
}
}
?>
Результат выполнения теста:
Failed asserting that the text of the selector "h1" does not contain "error".
Пример
Давайте проверим отсутствие текста сразу в нескольких элементах страницы. Создадим контроллер с несколькими абзацами:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$html = '<div class="content">';
$html .= '<p>hello</p>';
$html .= '<p>article</p>';
$html .= '<p>user</p>';
$html .= '</div>';
return new Response($html);
}
}
?>
Напишем тест, который проверяет, что в блоке .content
нет подстроки 'error':
<?php
namespace AppTestsController;
use SymfonyBundleFrameworkBundleTestWebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testContent(): void
{
$client = static::createClient();
$client->request('GET', '/article');
$this->assertSelectorTextNotContains('.content', 'error');
}
}
?>
Тест пройдёт успешно, так как ни один из абзацев не содержит
подстроку 'error'.
Смотрите также
-
метод
assertSelectorTextContains,
который проверяет наличие подстроки в тексте элемента -
метод
assertSelectorTextSame,
который проверяет точное совпадение текста элемента -
метод
assertSelectorExists,
который проверяет наличие элемента на странице -
метод
assertSelectorNotExists,
который проверяет отсутствие элемента на странице