РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1121 of 1361 menu

Метод assertSelectorCount

Метод assertSelectorCount относится к классу KernelBrowser и используется в функциональных тестах Symfony. Он проверяет, что CSS-селектор, переданный первым параметром, встречается в HTML-коде ответа ровно столько раз, сколько указано во втором параметре. Если количество элементов не совпадает, тест завершается с ошибкой.

Метод удобно применять, когда нужно убедиться, что на странице отрисовано определённое число карточек, строк таблицы, пунктов списка или других повторяющихся элементов.

Синтаксис

$client->assertSelectorCount(int $count, string $selector);

Пример

Давайте создадим контроллер, который выводит список из трёх элементов:

<?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('/articles', name: 'article_list')] public function list(): Response { return $this->render('article/list.html.twig', [ 'articles' => ['article 1', 'article 2', 'article 3'], ]); } } ?>

Теперь создадим Twig-шаблон, который выводит каждый элемент списка в теге li с классом article-item:

<ul> {% for article in articles %} <li class="article-item">{{ article }}</li> {% endfor %} </ul>

Напишем функциональный тест, который проверяет, что на странице ровно три элемента с классом article-item:

<?php namespace App\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class ArticleControllerTest extends WebTestCase { public function testArticleListCount(): void { $client = static::createClient(); $client->request('GET', '/articles'); $client->assertSelectorCount(3, 'li.article-item'); } } ?>

Если запустить этот тест, он завершится успешно, так как на странице действительно три элемента li.article-item.

Пример

Давайте рассмотрим ситуацию, когда количество элементов не совпадает. Изменим контроллер так, чтобы он выводил два элемента:

<?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('/articles', name: 'article_list')] public function list(): Response { return $this->render('article/list.html.twig', [ 'articles' => ['article 1', 'article 2'], ]); } } ?>

Теперь тест с ожиданием трёх элементов упадёт с сообщением о том, что найдено два элемента вместо трёх:

<?php namespace App\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class ArticleControllerTest extends WebTestCase { public function testArticleListCount(): void { $client = static::createClient(); $client->request('GET', '/articles'); $client->assertSelectorCount(3, 'li.article-item'); } } ?>

Результат выполнения теста:

Failed asserting that 2 matches expected 3.

Пример

Метод assertSelectorCount можно использовать и для проверки отсутствия элементов. Для этого достаточно передать ноль в качестве количества:

<?php namespace App\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class ArticleControllerTest extends WebTestCase { public function testNoEmptyItems(): void { $client = static::createClient(); $client->request('GET', '/articles'); $client->assertSelectorCount(0, 'li.article-item.empty'); } } ?>

Такой тест пройдёт успешно, если на странице нет элементов с классом empty.

Смотрите также

  • метод assertSelectorExists,
    который проверяет наличие элемента на странице
  • метод assertSelectorNotExists,
    который проверяет отсутствие элемента на странице
  • метод assertSelectorTextContains,
    который проверяет текст внутри элемента
  • класс KernelBrowser,
    который предоставляет методы для тестирования
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить