PHPStorm: integrando Docker + PHPUnit
--
Utilizo contêineres para praticamente tudo, esse hábito facilita meu dia a dia e poupa muito retrabalho. Sendo assim, quando vou desenvolver algo dentro do ecossistema do PHP, geralmente subo um container, me conecto a ela e começo a utilizar o composer para instalar novas dependências, fazer o autoload e disparar meus testes (Unitários, de integração…). Tudo isso ficou ainda mais simples quando resolvi utilizar a integração do PHPStorm com Docker para rodar os testes de forma mais simples e controlada usando PHPUnit.
❗️Pré-requisitos
Para o pleno aproveitamento desta material é necessário que você tenha familiaridade com as seguintes tecnologias e ferramentas:
- PHP
- Docker
- Docker-compose
- Composer
- PHPUnit
👨💻 Preparando o ambiente
Irei utilizar o Laravel Framework para agilizar o processo de demonstração, porém não se engane, os passos aqui apresentados podem ser utilizados de forma agnóstica.
Baixando o Laravel
Como falei no inicio deste material, utilizo contêineres para praticamente tudo, ou seja, não tenho o PHP instalado na minha máquina, logo para contornar isso utilizo o Docker. Execute:
docker run \\
--rm \\
-v $(pwd):/app \\
fabiojanio/php:8.0-alpine3.14 composer create-project --prefer-dist laravel/laravel
A instrução acima utiliza minha imagem pública
fabiojanio/php:8.0-alpine3.14
para subir um container temporário e executar uma instrução que baixa e instala o Laravel. Ao final do processo o container será automaticamente removido e o terminal liberado.
Subindo a aplicação
Desta vez faremos uso do docker-compose para facilitar nossa vida um pouco mais. Sendo assim, acesse o diretório criado por meio da instrução executada no tópico anterior (caso tenha executado a instrução original este diretório se chama laravel
):
cd laravel
Agora crie na raiz do diretório um arquivo chamado docker-compose.yml
e adicione este conteúdo a ele:
version: '3'services:
php:
container_name: php
image: fabiojanio/php:8.0-alpine3.14
volumes:
- ./:/app
working_dir: /app
restart: on-failure
user: www-data
ports:
- "8080:80"
command: >
sh -c "php artisan serve --host=0.0.0.0 --port=80"
A configuração acima é uma versão resumida de um exemplo de uso que publiquei no Github: https://github.com/docker-sources/php/blob/master/docker-compose.yml
Para subir nossa aplicação basta executar:
docker-compose up -d
Agora sua aplicação pode ser acessada em http://localhost:8080.
👨💻 Configurando PHPStorm para usar Docker + PHPUnit
Abra o projeto no PHPStorm e acesse: PHPStorm > Preferences > PHP > Test Frameworks
e clique em + (Add) > PHPUnit by Remote Interpreter
:
Configure um novo interpretador clicando nos três pontos (...
) e posteriormente em ok
:
Clique em +
(Add) e posteriormente selecione a opção destacada abaixo:
Caso o campo Server
esteja vazio, clique em New
e selecione sua versão do Docker, seja ela Docker for Mac
, Docker Desktop
, etc. O Configuration files
será preenchido automaticamente pois nosso projeto já tem um docker-compose.yml, já em Service
você irá escolher o container que tem o interpretador PHP, neste caso é o container chamado php
. Por fim clique em Ok
:
Na tela abaixo marque a opção destacada e clique em OK
:
Utilizamos a opção acima para que a IDE tente utilizar a instância atual do container caso ela exista, do contrário irá subir um. Antes de seguirmos, observe que nossa IDE já identificou a versão do PHP da imagem Docker utilizada.
Na próxima janela basta selecionar o interpretador php
que acabamos de configurar e clicar em OK
:
Não se preocupe caso a versão esteja diferente, isso é irrelevante.
Provavelmente a próxima janela será exibida com todas as configurações já carregadas, porém, caso isso não ocorra você poderá preencher manualmente conforme imagem abaixo e clique em OK
:
O
/app
é o workerdir que está configurado na minha imagem. Caso você esteja utilizando outra imagem ou tenha alterado essa configuração, lembre-se de refletir este ajuste nas configurações acima.
Agora acesse PHPStorm > Preferences > PHP
e configure conforme imagem abaixo, posteriormente clique em OK
:
A instrução acima é necessário para definir o interpretador padrão que o PHP utilizará para a CLI, caso isso não seja feito você será solicitado a informar que interpretador deseja utilizar toda vez que disparar um teste.
Agora você pode ir no diretório de testes e utilizar a interface para disparar um método de teste, uma classe ou até mesmo todos os testes. Veja esse exemplo:
Essa integração é simples, porém, no dia a dia isso irá poupar seu tempo. Ao invés de digitar instruções para disparar os testes, você pode simplesmente escolher o que testar e pronto.
✌️Conclusão
Explore sua IDE, veja quais recursos ela oferece, quais facilidades e integrações estão disponíveis. É importante saber fazer as coisas na unha utilizando a linha de comando quando estamos aprendendo algo, porém, isso não é muito prático no dia a dia. Busque formas de simplificar sua vida, de integrar as coisas e automatizar ou simplificar rotinas.
Não tenha medo. Explore!