Если вы только начинаете писать тесты в Drupal, то официальная документация — первое место, куда стоит заглянуть. Однако она не всегда отвечает на все вопросы новичков. В этой статье разберём несколько моментов, которые часто вызывают недоумение.
PHPUnit по умолчанию не установлен
В Drupal 11 пакет phpunit/phpunit
не входит в зависимости по умолчанию. Чтобы проверить, установлен ли он:
1 |
composer show phpunit/phpunit |
Если не установлен — добавьте вручную (Drupal 11 поддерживает PHPUnit 10):
1 |
composer require --dev phpunit/phpunit:^10 --with-dependencies |
Настройка конфигурации phpunit.xml
В документации подробно описано, как создать файл конфигурации для PHPUnit. Обычно рекомендуют скопировать шаблон:
1 |
cp www/core/phpunit.xml.dist www/core/phpunit.xml |
Но есть нюанс: нехорошая практика — хранить кастомные конфиги внутри www/core
. Лучше скопировать файл в корень проекта (где находится composer.json
) и скорректировать пути вручную.
Главное — правильно указать путь до core/tests/bootstrap.php
и параметры подключения к базе данных.
Указание нужных модулей при тестировании
Если вы тестируете код из конкретного модуля (например, modules/custom/ai
), важно, чтобы необходимые модули были активны во время выполнения теста. Это задаётся в свойстве $modules
внутри тестового класса.
Если не указать ai
, а Trait лежит в этом модуле — код не подгрузится, и тесты не запустятся.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace Drupal\Tests\ai\Unit; use Drupal\ai\Trait\TextValidationTrait; use Drupal\KernelTests\KernelTestBase; /** * @coversDefaultClass \Drupal\ai\Trait\TextValidationTrait * * @group ai */ class TextValidationTraitTest extends KernelTestBase { protected static $modules = ['system', 'ai']; ... |
Как запускать тесты
Может показаться, что тесты можно запускать через drush
, но это не так. Используется исполняемый файл PHPUnit:
1 |
./vendor/bin/phpunit |
Т.к. запуск phpunit можно сделать из любой папки, а файл phpunit.xml
лежит, например, в корне проекта, то укажите путь к конфигурации (в примере запуск из DOCUMENT_ROOT):
1 |
../vendor/bin/phpunit -c ../phpunit.xml modules/custom/ai |
Запуск тестов через Composer-скрипты
Мне нравится подход, когда тесты запускаются через скрипты в composer.json
. Это избавляет от необходимости каждый раз писать длинные команды и помнить путь до phpunit.xml
.
Обычно я кладу файл phpunit.xml
в корень проекта — туда, где composer.json
, — чтобы не указывать параметр -c
. Вот пример секции scripts
, которую я использую:
1 2 3 4 |
"scripts": { "test": "@php vendor/bin/phpunit www/modules/custom", "test:ai": "@php vendor/bin/phpunit www/modules/custom --group=ai" } |
Теперь, чтобы запустить все тесты или только группу ai
, достаточно:
1 2 |
composer test composer test:ai |
Это удобно, особенно если нужно запускать тесты часто, с разными параметрами. Плюс можно легко делиться командами с коллегами — всё уже настроено и готово.