Я использую composer в своих собственных / корпоративных проектах для развертывания и т. Д. Я уже использую модульные тесты php, но теперь я также хотел бы добавить автоматическое модульное тестирование всякий раз, когда проект установлен или обновлен, то есть я хотел бы выполнить phpunit на событие pre-autoload-dump компоновщика.
Увидеть https://getcomposer.org/doc/articles/scripts.md
В зависимости от успеха модульных тестов, я хотел бы либо продолжить, либо остановить процесс установки моего пакета. Поэтому, если модульный тест не пройден, версия не должна быть установлена.
Как бы вы предложили в целом продолжить это намерение?
Мой composer.json выглядит так:
{
"name": "Cravid/event",
"require": {
"php": ">=5.3.0",
"phpunit/phpunit": "4.*"},
"autoload": {
"psr-4": {"Cravid\\Event\\": "src/Gkm/Event"}
},
"autoload-dev": {
"psr-4": {"Cravid\\Event\\": "tests/Gkm/Event"}
},
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"}
},
"scripts": {
"pre-autoload-dump": "phpunit"}
}
Git — назначенная система контроля версий.
Ваше намерение, вероятно, создаст огромное количество хлопот.
Вы говорите, что хотите запустить тесты ДО установки, но при запуске чего-либо в событии pre-autoload-dump что-то уже установлено, а именно версия программного обеспечения, которое вы собираетесь тестировать. Что делать, если это программное обеспечение не проходит тест? Затем вы застряли с частично установленным программным обеспечением, которое неправильно сбросило свой автозагрузчик.
Кроме того, не выгружая автозагрузчик означает, что вы не можете использовать свое программное обеспечение. И вы не можете проверить это. И если вы бежите composer install
на вашей машине для разработки, чтобы получить неисправную копию для расследования, автозагрузка также остановится.
Я думаю, что не стоит использовать Composer для всего. Composer — отличный инструмент для управления программными зависимостями. Для этого он предлагает несколько хуков, позволяющих даже странным программным требованиям добавлять немного тут и там, но в общем случае вам это не нужно.
Чтобы создать что-то вроде непрерывной интеграции или непрерывной доставки с автоматическими тестами, вы должны использовать что-то за пределами Composer. Я бы порекомендовал использовать Phing определить задачи, которые необходимо выполнить для некоторых шагов, и, вероятно, экземпляр Дженкинс разрешить выполнение заданий.
Других решений пока нет …