Ejecución de PHPUnit dentro de un contenedor Docker con PhpStorm
(3)
Con PhpStorm ahora teniendo una mejor integración con el motor Docker (incluido Docker para Mac), ahora puede hacer lo siguiente (o leer este artículo ):
Línea de comando:
- Tire de la imagen
phpunit
Docker:docker pull phpunit/phpunit
- (Mac y tal vez Windows)
API_URL
el conector Docker alAPI_URL
:socat -d TCP-LISTEN:2376,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock
Entonces Phpstorm:
- Configurar la conexión al motor Docker:
- Vaya a Configuración -> Compilación, Ejecución, Despliegue -> Docker
- Cree una nueva configuración de Docker con
API URL
establecida en:- Linux:
unix:///var/run/docker.sock
- Windows y Mac:
http://127.0.0.1:2376
otcp://localhost:2376
- Linux:
- Configure el intérprete remoto:
- Vaya a Configuración -> Idiomas y marcos -> PHP
- Cree un nuevo intérprete CLI de PHP de la siguiente manera:
- Al hacer clic en
...
luego+
y en ''Remoto ...'' - Seleccione Docker con:
- ServerImage:
- Nombre de la imagen:
phpunit/phpunit:latest
- Ejecutable PHP:
php
- Al hacer clic en
- Configurar Phpunit:
- Vaya a Configuración -> Idiomas y marcos -> PHP -> PHPUnit
- Cree una nueva configuración de Phpunit (
+
luego ''Por intérprete remoto ...'' y seleccione - Establecer
Use Composer Autoloader
- Ruta al script:
/opt/project/vendor/autoload.php
- Archivo de configuración predeterminado:
/opt/project/phpunit.xml.dist
- Intenta ejecutar tus pruebas!
Quiero configurar mi PhpStorm IDE para ejecutar pruebas PHPUnit dentro de mi contenedor Docker.
Parece que estoy restringido a usar un ejecutable PHP local, o uno a través de SSH, como intérprete para las pruebas.
Podría instalar un servicio SSH en mi contenedor PHP, pero parece una solución un tanto hacky, y los artículos en línea desalientan la instalación de un servicio SSH en los contenedores.
Para intentar hacer funcionar a un intérprete local, intenté crear un script bash que pudiera realizar llamadas proxy a PHP dentro del contenedor, así:
#!/usr/bin/env bash
# Run PHP through Docker
docker exec -t mycontainer_php_1 php "$@"
Esto funciona perfectamente cuando lo ejecuto yo mismo, pero cuando apunto PhpStorm a él como un intérprete local de PHP, no lo reconoce como un ejecutable válido de PHP.
Entonces, ¿cuál es una buena forma de hacer que esto funcione?
Esto funciona:
DIR=$(dirname $(readlink -f "$0"))
docker run --rm --sig-proxy=true -v ${DIR}:${DIR} -w ${DIR} --pid=host php:cli php "$@"
simplemente póngalo en algún archivo, chmod + x it => simplemente probado con idea y se reconoce muy bien :)
El truco para hacer que todos los scripts de ayuda de phpstorms funcionen realmente es montar el directorio en el que reside el archivo ejecutable php. En caso de que este script no esté en la carpeta de tu ejecutable de phpunit y tu código fuente, tendrás que extenderlo para montarlos también.
(Nota importante aquí: deben estar montados en la misma carpeta en contenedor y host obv :))
Editar después de unos meses, pero tal vez sea útil para algunos: resolví esto con un ejemplo de WordPress aquí: http://original-brownbear.github.io/2015/12/23/phpunit-docker-phpstorm.html
Sé que dices que oíste que ssh en los contenedores acoplables es malo, pero creo que como PhpStorm no admite el ejecutor de Docker para ejecutar scripts de forma remota, no es una mala opción. Puede configurar un contenedor de acoplador como un intérprete de php remoto utilizando SSH dentro de PhpStorm, luego simplemente configure una configuración remota de PHPUnit.
Puede ver la guía paso a paso aquí:
https://mickadoo.github.io/php,phpunit,docker/2016/10/12/phpunit-docker.html
Actualización: ya no es necesario usar SSH. PhpStorm ahora es compatible con Docker, puede ejecutar pruebas de unidad PHP simplemente usando una imagen de acoplador PHP con PHPUnit instalado como un intérprete remoto.