Тестирование ядра
Pimcore использует Codeception для тестирования своих основных функций.
Для выполнения основных тестов Pimcore предоставляет файл docker-compose.yaml, который позволяет создать настройки для запуска тестов.
Docker-образы базируются на дебаг-версиях, поэтому вы можете отлаживать тесты с помощью xdebug. Однако убедитесь, что сопоставления путей применены правильно
Требования
- Установленные в системе
dockerиdocker compose - Локально клонированный git-репозиторий Pimcore
Подготовка
- Перейдите в директорию
tests\binрепозитория Pimcore - Выполните скрипт
./init-tests.sh. Он сделает следующее:- Запустит
docker compose up -dи настроит необходимые сервисы (БД, Redis и т.д.). Исходный код Pimcore монтируется в контейнер, поэтому изменения в файлах подхватываются сразу. - Скопирует некоторые файлы из
.github\ci\fileдля подготовки системы к выполнению тестов (фактически то же самое, что и для действий с github) - Выполнит
composer installдля установки всех зависимостей - Выведет дальнейшие инструкции
- Запустит
Теперь система готова, и тесты можно выполнять внутри контейнеров docker (смотрите также команды ниже).
После завершения работы не забудьте остановить docker контейнеры и очистить тома командой docker compose down -v --remove-orphans.
Выполнение тестов
Запуск всех тестов
Это запустит все тесты
docker compose exec php vendor/bin/codecept run -c . -vvv
Запуск конкретного набора тестов (suite):
Запускает только тесты моделей данных (Model). Список наборов приведен ниже.
docker compose exec php vendor/bin/codecept run -c . Model -vvv
Запуск конкретной группы тестов
Это может быть часть набора. У вас также есть возможность предоставить список групп, разделенных запятыми. Обзор доступных групп приведен в таблице ниже.
docker compose exec php vendor/bin/codecept run -c . Model -vvv -g dataTypeLocal
Тесты Redis кэша
Для Redis параметр PIMCORE_TEST_REDIS_DSN является обязательным. Если вы не используете Redis, предоставляемый docker-compose.yaml, установите для него
значение, которое не конфликтует ни с какими другими базами данных Redis в вашей системе.
docker compose exec php vendor/bin/codecept run -c . Cache
Проверяйте лог-файлы
Не забывайте проверять лог-файлы (особенно test.log и php.log) внутри контейнера docker при возникновении проблем.
Важные переменные окружения
Настроены по умолчанию в docker-compose.yaml, но могут быть изменены по мере необходимости.
| Переменная | Пример | Комментарий |
|---|---|---|
| APP_ENV | test | Тестовое окружение |
| PIMCORE_TEST | 1 | Важно переключает пути к директориям (например, /var/classes) |
| PIMCORE_TEST_SKIP_DB | 1 | Пропускает настройку БД (ускоряет запуск тестов, не требующих БД). |
| PIMCORE_TEST_REDIS_DSN | redis://localhost | Необходим для тестов REDIS |
Наборы тестов (Suites)
Тесты разделены на наборы, каждый из которых охватывает определенные области ядра.
| Название набора | Описание |
|---|---|
| Cache | Тесты кэша |
| Model | Тесты объектов данных (Dataobjects) |
| Service | Тесты, охватывающие общие задачи или совместно используемые элементы (управление версиями, ...) |
| Unit | Другие тесты (возможно, потребуется реструктуризация) |
| ... |
Группы
В следующей таблице перечислены все группы, используемые в настоящее время в основных тестах Pimcore. Если вы расширяете тесты или пишете новые, пожалуйста, пометьте их соответствующим образом.
| Группа | Описание |
|---|---|
| cache-cli | Тесты командной строки кэша |
| cache.core.array | Тесты обработчика массива кэша |
| cache.core.db | Тесты обработчика базы данных кэша |
| cache.core.file | Тесты обработчика файлов кэша |
| cache.core.redis | Тесты обработчика Redis кэша |
| cache.core.redis_lua | Тесты обработчика Redis кэша с включенным LUA |
| dataTypeLocal | Dataobject - тесты типов данных |
| model.relations.multipleassignment | Dataobject - тесты "разрешить несколько назначений" |
| ... |
Полезные опции командной строки
Полезные примеры:
| Опция | Пример | Описание |
|---|---|---|
| --group (-g | --group dataTypeLocal | Запуск только указанных групп |
| --skip (-s) | --skip cache,rest | Пропускать тесты кэширования и Rest |
| --skip-group (-x) | --skip-group cache.core.file | Пропустить тесты файлового кэша |
| --fail-fast | --fail-fast | Остановить при первой же ошибке |
| ... |
Дополнительные опции см. здесь: Команды Codeception.
Предоставление новых тестов и расширение существующих
В целом, мы высоко ценим вклад в расширение и улучшение формы тестов. Пожалуйста, следуйте структуре и принципам, описанным выше.
Если у вас есть возможность расширить модель данных, пожалуйста, ознакомьтесь с Model.php. Там вы найдете все определения классов, используемые для тестирования.
Выполнение анализа PHPStan
Сначала получите копию этого примера файла конфигурации и поместите его в свой корневой каталог.
Добавьте зависимости:
# минимум
composer require "phpstan/phpstan:^0.12" "phpstan/phpstan-symfony:^0.12"
# требуется, если вы хотите провести полный анализ
composer require "elasticsearch/elasticsearch:^7.11" "composer/composer:*"
Запустите
TMPDIR=/tmp/[dedicateddir] ./vendor/bin/phpstan analyse --memory-limit=-1
где /tmp/[dedicateddir] должен быть доступным для записи временным каталогом.

Откройте журнал сборки и проверьте, нет ли проблем.

Функция базового файла PHPStan
PHPStan может создавать базовый файл, содержащий все текущие ошибки. Смотрите эту запись blog.
Чтобы сгенерировать новый базовый файл, вам необходимо выполнить следующую команду:
vendor/bin/phpstan analyse --memory-limit=-1 --generate-baseline
Включив этот базовый файл, мы можем обнаруживать новые ошибки без необходимости сначала исправлять все ошибки.
Обзор уровней PHPStan
| Уровень | Проверки |
|---|---|
| 0 | основные проверки, неизвестные классы, неизвестные функции, неизвестные методы, вызываемые с помощью $this, неправильное количество аргументов, передаваемых этим методам и функциям, всегда неопределенные переменные |
| 1 | возможно, неопределенные переменные, неизвестные магические методы и свойства в классах с __call и __get |
| 2 | неизвестные методы проверяются во всех выражениях (не только в $this), проверяя PHPDocs |
| 3 | возвращаемые типы, типы, назначенные свойствам |
| 4 | базовая проверка неактивного кода - всегда ложный instanceof и другие проверки типов, неактивные ветки else, недоступный код после возврата и т.д. |
| 5 | проверка типов аргументов, передаваемых методам и функциям |
| 6 | проверка на отсутствие указателей типов |
| 7 | сообщение о частично неверных типах объединения |
| 8 | сообщение о вызове методов и доступе к свойствам для типов с нулевым значением |
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.