Запуск PHPUnit в контейнере Docker с PhpStorm
Я хочу настроить свою IDE PhpStorm для запуска тестов PHPUnit в моем контейнере Docker.
Кажется, что я ограничен либо использованием локального исполняемого файла PHP, либо одного через SSH, в качестве интерпретатора для тестов.
Я мог бы установить службу SSH на моем контейнере PHP, но это похоже на хакерское решение, а статьи в Интернете препятствуют установке службы SSH на контейнерах.
Чтобы попытаться заставить локальный интерпретатор работать, я попытался создать bash script, который проксировал бы вызовы PHP в контейнере, например:
#!/usr/bin/env bash
# Run PHP through Docker
docker exec -t mycontainer_php_1 php "[email protected]"
Это работает отлично, когда я запускаю его сам, но когда я указываю PhpStorm на него как локальный PHP-интерпретатор, он не распознает его как допустимый исполняемый файл PHP.
Так какой хороший способ заставить это работать?
Ответы
Ответ 1
Это работает:
DIR=$(dirname $(readlink -f "$0"))
docker run --rm --sig-proxy=true -v ${DIR}:${DIR} -w ${DIR} --pid=host php:cli php "[email protected]"
просто поместите его в какой-то файл, chmod + x it = > просто протестирован с идеей и распознается просто отлично:)
Трюк, чтобы заставить все скрипты-помощники phpstorms работать, - это смонтировать каталог, в котором находится исполняемый файл php.
Если этот script не находится в папке исполняемого файла и исходного кода phpunit, вам придется расширять его, чтобы также смонтировать их.
(важно отметить здесь: они должны быть установлены в одну и ту же папку в контейнере и в хосте obv:))
Редактировать через несколько месяцев, но, возможно, полезно для некоторых:
Проделал это с помощью примера WordPress:
http://original-brownbear.github.io/2015/12/23/phpunit-docker-phpstorm.html
Ответ 2
Теперь, когда PhpStorm имеет лучшую интеграцию с движком Docker (включая Docker для Mac), теперь вы можете просто сделать следующее (или прочитать эту статью):
Командная строка:
- Потяните изображение Docker
phpunit
: docker pull phpunit/phpunit
- (Mac и, возможно, Windows) Мост сокета Docker в
API_URL
: socat -d TCP-LISTEN:2376,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock
Затем Phpstorm:
- Настроить подключение к движку Docker:
- Перейдите в Настройки → Сборка, Выполнение, Развертывание → Докер
- Создайте новую конфигурацию Docker с помощью
API URL
, установленную в:
- Linux:
unix:///var/run/docker.sock
- Windows и Mac:
http://127.0.0.1:2376
или tcp://localhost:2376
- Настроить удаленный интерпретатор:
- Перейдите в Настройки → Языки и рамки → PHP
- Создайте новый интерпретатор PHP CLI:
- Нажав
...
, затем +
и 'Remote...'
- Выберите Докер с помощью:
- ServerImage:
- Название изображения:
phpunit/phpunit:latest
- исполняемый файл PHP:
php
- Настроить Phpunit:
- Перейдите в Настройки → Языки и рамки → PHP → PHPUnit
- Создайте новую конфигурацию Phpunit (
+
затем "Удаленным интерпретатором..." и выберите
- Установить
Use Composer Autoloader
- Путь к script:
/opt/project/vendor/autoload.php
- Файл конфигурации по умолчанию:
/opt/project/phpunit.xml.dist
- Попробуйте выполнить свои тесты!
Ответ 3
Я знаю, что вы говорите, что слышали, что ssh в контейнерах докеров плох, но я думаю, так как PhpStorm не поддерживает docker exec для удаленного запуска скриптов, это не плохой вариант. Вы можете настроить контейнер докеров как удаленный php-интерпретатор, используя SSH внутри PhpStorm, а затем просто настроить удаленную конфигурацию PHPUnit.
Вы можете посмотреть пошаговое руководство здесь:
https://mickadoo.github.io/php,phpunit,docker/2016/10/12/phpunit-docker.html
Обновление: вам больше не нужно использовать SSH. PhpStorm теперь поддерживает докеры, вы можете запускать модульные тесты PHP только с помощью изображения PHP-докеров с PHPUnit, установленного как удаленный интерпретатор.