Запуск Unit Test для отдельного модуля или вендора в Magento 2

Запуск Unit Test для отдельного модуля или вендора в Magento 2

Это очень удобно, запускать модульные тесты в узком диапазоне тестирования: для отдельного модуля или для отдельного вендора. Таким образом вы сможете резко увеличить скорость прохождения разрабатываемого вами unit-теста. Настройки для "натравливания" тестов на определенное место в вашем проекте крайне просты: отредактировать надо буквально два файла. В одном из них мы определим место где будут выполнятся файлы тестов, а в другом - какие модульные тесты будут выполнятся: unit, unit-static или unit-integration. Итак, приступим.

Диапазон тестируемых файлов тестов

Первое, что мы сделаем - определим тестируемый диапазон и закомментируем мешающие нам настройки. Делать мы это будем в файле

dev/tests/unit/phpunit.xml

Такого файла может не быть, но обязательно будет файл

dev/tests/unit/phpunit.xml.dist

Нам лучше создать файл phpunit.xml, скопировав и переименовав phpunit.xml.dist. Таким образом мы сохраним оригинальные настройки и получим возможность оперировать своими. Настраивать мы будем testsuite вот в этом месте:

<testsuite name="Magento_Unit_Tests_App_Code">
    <directory suffix="Test.php">../../../app/code/*/*/Test/Unit</directory>
</testsuite>

В ноде directory указан шаблон пути, по которому будут искаться файлы тестов для выполнения. Соответственно, если мы хотим тестировать все  модули отдельного вендора, то данный путь надо перобразовать к виду

../../../app/code/VENDOR/*/Test/Unit

Если же мы желаем работать исключительно с одним модулем, то отредактировать шаблон пути мы должны вот так

../../../app/code/VENDOR/MODULE/Test/Unit

Кроме этого, нам необходимо закомментировать некоторые строки в этом же файле. Ниже приведен список узлов, которые должы быть подвергнуты данной процедуре.

<testsuite name="Magento_Unit_Tests_Other">
    <!-- some commented strings -->
</testsuite>
<filter>
    <!-- some commented strings -->
</filter>
<listeners>
    <!-- some commented strings -->
</listeners>
<logging>
    <!-- some commented strings -->
</logging>

В принципе, этим можно и ограничится, но в таком случае будут запускаться три вида юнит-тестов:

  1. unit,
  2. unit-static,
  3. unit-integration

Нас интересует только "чистый" unit, поэтому нам придется выполнить следующий, втрой, шаг.

Диапазон запускаемых unit тестов

Магия этой хитрости находится в файле vendor/magento/module-developer/Console/Command/DevTestsRunCommand.php на строке 147

vendor/magento/module-developer/Console/Command/DevTestsRunCommand.php:147

Мы должны привести эту строку кода к такому виду

'unit' => ['unit', /*'unit-static', 'unit-integration'*/],

То есть, мы комментируем unit-static и unit-integration тесты.

Вот и все. Теперь наши тесты можно запускать простой командой из корня проекта

php bin/magento dev:tests:run unit

и не боятся, что проверка работоспособности тестов нашего вендора/модуля приведет к выполнению всех коробочных модулей из директории vendor, что неминуемо приведет к фейлам при их запуске.