Если вы используете Docker для запуска проекта локально, то наверняка сталкивались со сложностями при запуске тестов. PhpStorm позволяет запускать тесты прямо из кода, для этого нужно лишь кликнуть правой кнопкой мыши на нужном тесте и нажать Run, но с использованием это кажется не так просто на первый взгляд. К счастью, PhpStorm имеет встроенную интеграцию с Docker, которая в том числе позволяет запускать тесты прямо внутри контейнера.
Настройка соединения с Docker
Откроем окно настроек и выберем: Build, Execution, Deployment -> Docker
. Создадим новое соединение с Docker. PhpStorm, начиная с версии 2017.1, поддерживает соединение напрямую через Unix сокет.
Инструкцию для более старых версий можно найти по ссылке: https://confluence.jetbrains.com/display/PhpStorm/Docker+Support+in+PhpStorm.
Настройка удаленного интерпретатора PHP
Для настройки интерпретатора в окне настроек выберем Languages & Frameworks -> PHP
. Далее нажмем кнопку […] напротив выпадающего списка с интерпретаторами. В открывшемся окне добавим новый интерпретатор, нажав на [+] и выбрав пункт «From Docker, Vagrant, VM, Remote…». Далее выбираем тип Docker Compose, в качестве сервера указываем ранее добавленное подключение к Docker, в поле Service — выбираем контейнер, в котором запускается код приложения (web в моем случае).
После сохранения PhpStorm запустит Docker, проверит, доступен ли PHP по указанному пути, и выведет данные для созданного соединения:
Настройка PHPUnit
Соединение с Docker настроено, осталось настроить запуск тестов внутри Docker контейнера. Для этого в окне настроек выберем Languages & Frameworks -> PHP -> Test Frameworks
, создадим новую конфигурацию, и выберем тип By Remote Interpreter. В открывшемся окне выберем ранее добавленный интерпретатор и нажмем ОК.
В окне настроек указываем, что хотим использовать автолоадер Composer и указываем путь до него /test_project/vendor/autoloader.php
, т.к. Laravel уже имеет PHPUnit в composer-файле по умолчанию. Также указываем путь до конфигурационного файла phpunit внутри Docker контейнера:
На этом настройка окончена. Теперь вы можете запускать тесты, точно так же, как с локально установленным php. просто кликните правой кнопкой мыши по любому тесту и нажмите Run.
Заключение
Команда PhpStorm постоянно работает над интеграцией со всеми инструментами разработки, делая его одной из самых мощный IDE для PHP. Помимо PHPUnit, так же имеется встроенная поддержка фреймворка Codeception.
P.S. На момент написания статьи интеграция с Docker имеет один недостаток: нет возможности переиспользовать уже запущенные Docker-контейнеры, при каждом запуске тестов контейнеры перезагружаются, что требует некоторое время. Если эта проблема актуальна для вас, можно проголосовать за данный баг в багтрекере jetbrains: https://youtrack.jetbrains.com/issue/PY-18901