Как я могу выполнить модульные тесты/анализ кода для отдельных модулей с помощью поставщика CI?
В компании, с которой я работаю, наши модули являются отдельными репозиториями. Мы добавляем их в качестве пакетов composer в нашу установку Magento 2, добавив GitHub в качестве репозитория в нашем composer.json
:
"require": {
"vendor/custom-module": "dev-master"
},
"repositories": [
{
"type": "git",
"url": "[email protected]:CompanyName/custom-module.git"
}
],
"autoload": {
"files": [
"registration.php"
],
"psr-4": {
"Happy\\PrivateProducts\\": ""
}
},
Это прекрасно работает, никаких вопросов нет.
Следующее, что мы хотим сделать, это настроить эти модули как отдельные тестируемые модули с использованием поставщика непрерывной интеграции (в нашем случае CircleCI). Поэтому я добавил такие зависимости, как phpunit
и phpcs
, в composer.json
нашего модуль:
"require-dev": {
"phpunit/phpunit": "5.3.5",
"squizlabs/php_codesniffer": "1.5.3"
}
Мы настраиваем нашу master
-ветвь для защиты и выполняем нашу работу в development
-ветви. Когда мы хотим объединить изменения, мы отправляем запрос на извлечение в нашу ветвь master
. Это тот момент, когда вступает в действие CircleCI.
Все правильно устанавливается в создаваемый контейнер наших серверов CI. Однако, когда я пытаюсь запустить phpunit
или phpcs
из командной строки (например, с помощью vender/bin/phpunit
или vendor/bin/phpcs
), я получаю ошибку PHP, что все виды зависимостей Magento отсутствует:
PHP Fatal error: Uncaught Error: Class 'Magento\Framework\Component\ComponentRegistrar' not found in /home/ubuntu/custom-module/registration.php:6
Stack trace:
#0 /home/ubuntu/custom-module/vendor/composer/autoload_real.php(66): require()
#1 /home/ubuntu/custom-module/vendor/composer/autoload_real.php(56): composerRequiref6475a93b986d5b841accb13703f079a('bdaf00c9b7defe0...', '/home/ubuntu/ma...')
#2 /home/ubuntu/custom-module/vendor/autoload.php(7): ComposerAutoloaderInitf6475a93b986d5b841accb13703f079a::getLoader()
#3 /home/ubuntu/custom-module/vendor/phpunit/phpunit/phpunit(45): require('/home/ubuntu/ma...')
#4 {main}
Брошенный в/home/ubuntu/mage2-private-products/registration.php в строке 6
Мой вопрос
У меня есть довольно хорошее представление о том, почему я получаю эту ошибку. В конце концов, у меня есть registration.php
в моем composer.json
свойстве автоматической загрузки. Тем не менее, мне интересно, какая здесь лучшая практика?
Должен ли я опуститьregistration.php
из моегоcomposer.json
-файла?- Должен ли я включать полную платформу Magento в качестве зависимости от разработчика? (Я так не думаю, потому что мое подразделение тесты должны высмеивать все).
- Должен ли я обернуть свою функцию регистрации с помощью
if class_exists()
? - Какое-нибудь другое решение/предложение?
Каков опыт/лучшие практики других людей, когда дело доходит до тестирования отдельных модулей /процессов CI с Magento 2?
Редактировать: Я обнаружил, что если я опущу свою registration.php
автозагрузку в моем composer.json
, то Magento 2 не увидит мой модуль (что имеет смысл). На данный момент я включил фреймворк Magento (magento/framework
) в качестве зависимость от разработки и добавил auth.json
для учетных данных. Я думаю, что это лучший способ сделать это, но мне все еще интересен опыт других людей.
1 answers
В вашем composer.json вы загружаете registration.php
, для чего требуется Magento\Framework\Component\ComponentRegistrar
. Таким образом, у вас есть зависимость от пакета magento/framework
. Если вы добавите его в свой файл composer.json, вам должно быть хорошо.