UnitTest via Docker/Lando met PHPUnit in PHPStorm

Het werkend krijgen van PHPUnit in PHPStorm via lando / Docker kan een uitdaging zijn, maar met dit stappenplan is het goed te doen. Het kost wat moeite, maar dan heb je ook wat ;-)

Voor je begint:

  • Start lando via lando start.
  • Gebruik een PHP project wat via composer wordt beheerd en PHPUnit als dependency heeft.
  • Voer composer uit via lando composer install
  • Zoek je netwerk ID op via docker network ls. Je zoekt voor het netwerk van je lando omgeving (er is er 1 per project) en kopieer het "Network ID".
  • Ga de lando php container in (lando ssh) en zoek de extension dir op (php -i | grep -i 'extension_dir'). Deze heb je later nodig voor de xdebug configuratie.

Stap 1: Configureer Docker in PHPStorm.

  • Ga naar je settings
  • Zoek het tabje "Docker" onder het "Build, Execution, Deployment" menu. Als je het niet kunt vinden, kun je ook zoeken naar Docker in het zoekvenster van het settings scherm.

PHPStorm

  • Selecteer "Build, Execution, Deploy"
  • Selecteer "Docker"
  • Klik op "+"
  • Selecteer "Docker for Mac" (als je op een Mac werkt) of "Unix socket" met de default waarde voor Linux.
  • Er verschijnt onderin beeld "Connection successful"

Stap 2: Configureer PHPStorm PHP CLI

Vervolgens moet PHPStorm op de hoogte worden gebracht van PHP in de Lando image. Deze settings staan in het "Voor je begint" segment.

  • Zoek de PHP instellingen op in het settings scherm. Kies je CLI interpreter. (stap 2.1)
  • Stap 2.2 Configureer PHP interpreter
  • Stap 2.3 Klik op het "Folder" icoon naast "Docker container"

PHP CLI settings

Stap 2.1 CLI Interpreter

  1. Selecteer PHP.
  2. Wijzig de PHP versie indien nodig.
  3. Klik op de ... naast "CLI Interpreter"

 

PHP CLI Interpreter

Stap 2.2 Configure Remote PHP Interpreter

  1. Druk op +
  2. Kies "From Docker, Vagrant..."
  3. Kies in de popup voor "Docker", "Server: Docker", "Image name: devwithlando/php"
  4. Druk op "OK"
  5. Vul bij de "Debugger extension" de extension-dir (met xdebug.so) in.

CLI Interpreter

Stap 2.3 Container "Network mode"

Verander de container "Network mode" in het netwerk ID vanuit de "Voor je begint" sectie.

Verander de mapping tussen het hostpad en het containerpad naar /app.

Container network mode

Stap 3: Configureer PHPStorm PHPUnit

Hier gaan we PHPStorm vertellen over PHPUnit en waar het te vinden is.

  • Localiseer de test instellingen onder de PHP sectie.
  • Creeer een "PHPUnit by remote interpreter" configuratie.
  • Localiseer de phpunit.phar van het project.

PHPUnit by remote interpreter

Stap 4: Maak een PHPUnit configuratie

Nu de instellingen in PHPStorm goed staan is de volgende stap een "Run/Debug configuratie" zodat je met een druk op de knop de testen kan draaien. Dit is niet de laatste stap.

Test Run configuration

  • Localiseer het "Run/Debug configuration" scherm.
  • Maak een "All custom tests" PHPUnit Run configuratie.

Geef een naam aan de Test Run configuratie. Zet de scope tot een directory naar keuze. Je kunt dit per module doen, of voor de gehele custom map of voor een heel project. De directory is wel lokaal (dus niet de Lando folder). Controleer of de interpreter klopt.

Stap 5: PHPUnit.xml instellingen

Voor het gemak heb ik een aparte configuratie voor PHPUnit gemaakt voor Lando/PHPStorm. Daar kun je specifieke instellingen in opslaan.

<php>
    <env name="SIMPLETEST_BASE_URL" value="http://appserver"/>
    <env name="SIMPLETEST_DB" value="mysql://drupal8:drupal8@database/drupal8#phpunit"/>
</php>
<testsuites>
    <testsuite name="unit">
      <file>./web/core/tests/TestSuites/UnitTestSuite.php</file>
    </testsuite>
</testsuites>
<filter>
  <whitelist>
      <directory>./web/modules</directory>
  </whitelist>
</filter>

 

back_blog