Я начал экспериментировать с Composer Scripts .
У меня есть проект, в котором есть «Функциональные тесты» конечных точек API. Для запуска всего набора тестов необходимо выполнить следующие команды по порядку:
composer install
для установки всех необходимых зависимостей бэкэнд-API
php yii server --test
для запуска облегченного сервера, подключенного к «тестовой» базе данных MySQL. Тестовый сервер начинает работать на localhost:9000
.
sh vendor/bin/phpunit --configuration tests/functional/phpunit.xml
для запуска реальных тестов. Эта последняя команда запускает выполнение всех тестовых случаев, большинство из которых выполняет HTTP-вызовы на облегченный сервер, запущенный на шаге 2.
Я хотел бы автоматизировать и «атомизировать» этот трехэтапный процесс в единый скрипт Composer, который можно легко запускать, убивать и перезапускать без особых усилий.
Вот мой текущий прогресс:
"scripts": {
"test-functional": [
"@composer install",
"php yii server --test",
"sh vendor/bin/phpunit --configuration tests/functional/phpunit.xml"
]
}
Проблема в том, что 2-я команда (php yii server --test
) «крадет» терминал, потому что встроенный облегченный сервер PHP требует, чтобы терминал был открыт во время выполнения команды. Убийство команды также убивает облегченный сервер. Я попытался добавить суффикс второго шага сценария к &
, что обычно заставляет процессы идти в фоновом режиме, а не красть терминал, но кажется, что этот трюк не работает для скриптов Composer. Любой другой способ или возможность, которую я пропускаю?
Моя конечная цель - выполнить 3 шага атомарным способом, вывести результаты тестов и завершить команду, очистив все (включая уничтожение сервера lite, запущенного на шаге 2).