Иногда проект создается в виде отдельных приложений, например административная часть и пользовательская. В таком случае, оптимально, когда каждое приложение содержит свой набор тестов. Но часто бывает удобнее запускать все наборы одной командой и получать один общий отчет. Об этом в данной заметке.

Например проект состоит из нескольких приложений:
  • frontend
  • backend

и стоит задача создать единый загрузчик для запуска тестов всех приложений одной командой. В таком случае вы можете получить один отчет для всего проекта.
Для это необходимо создать главный конфигурационный файл codeception.yml в корне проекта который будет подключать одноименные конфигурационные файлы каждого из приложений.
Подобная схема тестирования используется в php-фреймворке Yii2 advanced.


Создать вручную (или скопировать) файл codeception.yml в корне проекта. Указать с помощью «include» пути к конфигурационным файлам приложений - codeception.yml, которые вы хотите подключить.
Пример:
include:
  - frontend
  - backend
paths:
  log: log
settings:
  colors: true

Кроме того, вам следует указать путь к каталогу log, в котором будут храниться отчеты и логи всего проекта. Если есть какая-то общая папка, то лучше всего разместить в ней. Если оставить как в примере, то в корне проекта создастся папка log.

Для создание отдельных наборов нужно перейти поочереди в каждое приложение, сначала в папку frontend и выполнить:
codecept bootstrap --namespace frontend

потом в backend и выполнить:
codecept bootstrap --namespace backend

Или, выполняя команду из корня проекта, просто указать путь последним параметром:
codecept bootstrap --namespace frontend frontend
в данном случае в папке frontend создастся конфигурационный файл и тестовые наборы с пространством имен frontend.



Создание нового теста.
Для создание нового файла теста нужно перейти в папку нужного приложения, например frontend и выполнить генерацию нужного типа теста, например модульного по типу cest:
codecept generate:cest unit Name
или из корня проекта:
codecept generate:cest unit Name -c frontend




Пространство имен помощников и тестов.
Для того, чтобы избежать конфликтов имен между классами тестов и помощниками, они должны быть добавлены в пространства имен. При генерации новых классов, это делается автоматически.
Кое-где в устаревшей документации Codeception можно прочитать, что Codeception имеет утилиты для того, чтобы обновить тесты существующего проекта, добавив в них использование пространств имен с помощью команды codecept refactor:add-namespace, но используя последнии версии Codeception, вы получите ошибку в консоли:
Command "refactor" is not defined.
Похоже, что разработчики отказались от этого, тем более, что классы тестов типа Cest все равно нужно было исправлять вручную. Так что, если вы внедряете структуру тестирования сразу нескольких приложений для существующего проекта или просто переносите тесты в такую структуру, нужно будет подправить пространства имен вручную. Например добавить:
use frontend\UnitTester;
в начало теста.


Запуск тестов.
• Для запуска всех тестов проекта:
codecept run
Это выполнит тесты для всех приложений и сольет отчеты в один.

• Запуск всех типов тестов из каталога frontend:
codecept run -c frontend
• Запуск модульных тестов из каталога frontend:
codecept run unit -c frontend

Опция -c позволяет указать путь к codeception.yml