Как я могу выполнить модульные тесты/анализ кода для отдельных модулей с помощью поставщика 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 для учетных данных. Я думаю, что это лучший способ сделать это, но мне все еще интересен опыт других людей.

Author: Giel Berkers, 2017-03-08

1 answers

В вашем composer.json вы загружаете registration.php, для чего требуется Magento\Framework\Component\ComponentRegistrar. Таким образом, у вас есть зависимость от пакета magento/framework. Если вы добавите его в свой файл composer.json, вам должно быть хорошо.

 2
Author: Michiel, 2017-03-11 09:31:48