Запуск тестов
По умолчанию тесты запускаются на SQLite в памяти:
composer testЧтобы запустить их на MySQL или PostgreSQL, поднимите базы из compose.yml и направьте на них тесты:
docker compose up -d mysql pgsql
DB_CONNECTION=mysql DB_PORT=33306 composer test
DB_CONNECTION=pgsql DB_PORT=54329 composer testИмя базы, пользователь и пароль по умолчанию — query_builder, user и secret, как в compose.yml. При необходимости переопределите их через DB_DATABASE, DB_USERNAME, DB_PASSWORD и DB_HOST.
На MySQL и PostgreSQL схема и данные фикстур создаются один раз на тестовый процесс, и каждый тест выполняется в транзакции, которая затем откатывается (перенесённый набор spatie в tests/Compat по-прежнему мигрирует свои таблицы для каждого теста). Последовательный прогон использует одну базу, поэтому не запускайте два прогона на одном сервере одновременно.
Тесты также запускаются параллельно, по умолчанию по процессу на ядро процессора:
composer test:parallel
DB_CONNECTION=mysql DB_PORT=33306 composer test:parallel
DB_CONNECTION=pgsql DB_PORT=54329 composer test:parallel
vendor/bin/pest --parallel --processes=4Каждый процесс получает свою базу <DB_DATABASE>_<n> (query_builder_1, query_builder_2, …), которая создаётся при первом использовании и сохраняется до следующего прогона. Поэтому пользователю базы нужно право создавать эти базы:
PostgreSQL:
userизcompose.yml— суперпользователь, ничего делать не нужно.MySQL:
compose.ymlвыдаётuserвсе привилегии наquery\_builder\_%черезdocker/mysql-init.sql, который выполняется только при создании тома с данными. Для контейнера, созданного до появления этого скрипта, выдайте их один раз вручную:bashdocker compose exec mysql mysql -uroot -psecret \ -e "GRANT ALL PRIVILEGES ON \`query\\_builder\\_%\`.* TO 'user'@'%'"или пересоздайте контейнер вместе с данными:
docker compose rm -sfv mysql, затемdocker compose up -d mysql.
Все тесты можно запустить и внутри Docker, без PHP на хосте:
docker compose build php
docker compose run --rm php composer install
docker compose run --rm php composer test
docker compose up -d mysql pgsql
docker compose run --rm -e DB_CONNECTION=mysql -e DB_HOST=mysql -e DB_PORT=3306 php composer test
docker compose run --rm -e DB_CONNECTION=pgsql -e DB_HOST=pgsql -e DB_PORT=5432 php composer testСборка образа с другой версией PHP:
PHP_VERSION=8.3 docker compose build phpНа Linux-хосте, где id пользователя не 1000, собирайте образ со своим id, чтобы у файлов, записанных в bind mount, был правильный владелец:
docker compose build --build-arg UID="$(id -u)" phpСтатический анализ и стиль кода:
composer analyse
composer lint