Unit-Tests
Um Unit-Tests lokal auszuführen, siehe die GitHub Workflows und führe in deinem lokalen Container Folgendes aus:
Unit-Tests der PHP-Module
Interaktiv:
podman exec -it zms-web bashcd {zmsadmin, zmscalldisplay, zmsdldb, zmsentities, zmsmessaging, zmsslim, zmsstatistic, zmsticketprinter}./vendor/bin/phpunitLokales zms-web mountet .devcontainer/php/xdebug.ini mit xdebug.mode=debug,develop und xdebug.start_with_request=yes. Dadurch hängt PHPUnit (besonders zmsadmin und andere Slim-Apps) unter Podman auf macOS oder läuft sehr langsam. Xdebug für den PHPUnit-Prozess ausschalten:
podman exec -it zms-web bash -lc 'export XDEBUG_MODE=off; cd zmsadmin && ./vendor/bin/phpunit --no-coverage'zmsadmin durch das gewünschte Modul ersetzen. export XDEBUG_MODE=off; muss vor cd stehen. XDEBUG_MODE=off cd zmsadmin && ./vendor/bin/phpunit setzt die Variable nur für cd, PHPUnit läuft dann weiter mit Debugger.
Nützliche Flags für ./vendor/bin/phpunit:
--display-warnings
--display-deprecations
--display-notices
--display-errors
--display-failures
--debugSonderfälle (zmsbackend & zmsclient)
zmsclient:
Für zmsclient benötigst du das PHP-Basis-Image, das einen lokalen Mock-Server startet. Das JSON in den Mocks muss zur Signatur passen, die die Entität in den Anfragen zurückgibt (das ist üblicherweise die Ursache, wenn Tests in zmsclient fehlschlagen).
cd zmsclient
./zmsclient-test
./zmsclient-test --filter "testSetKeyBasic"Das Skript zmsclient-test startet die Mock- und Test-Container und führt die PHPUnit-Tests aus.
Traditionelle Methode (überschreibt lokale DB)
Für zmsbackend müssen Testdaten importiert werden. Beachte, dass dabei deine lokale Datenbank überschrieben wird.
zmsbackend (einheitliches REST-API- und Datenbankmodul für /terminvereinbarung/api/2):
./zmsbackend/zmsbackend-testOder manuell (in zms-web):
cd zmsbackend && bin/importTestData --commit
cd zmsbackend && bin/configure && ./vendor/bin/phpunitPHP-Unit-Tests im Container (empfohlen – isolierte Umgebung)
Führe deine Tests in sauberen, wegwerfbaren Containern aus, damit sie weder dein lokales System noch deine Datenbank beeinträchtigen:
# Web-Container betreten
podman exec -it zms-web bash
# zmsbackend-Tests ausführen
./zmsbackend/zmsbackend-test # alle Tests
./zmsbackend/zmsbackend-test --filter="StatusTest::testBasic" # spezifischen Test
./zmsbackend/zmsbackend-test --filter="StatusGetTest::testRendering" # spezifischen TestVerfügbare PHPUnit-Flags:
# Testauswahl (filter ist ein Regex gegen "Namespace\TestClass::testMethod")
--filter="TestClass::testMethod" # spezifische Testmethode
--filter="TestClass" # alle Tests einer Klasse
--filter="testMethod" # alle Tests mit passendem Methodennamen
--filter="pattern" # Tests nach Regex-Muster
# Ausgabe & Ausführlichkeit
--verbose # detailliertere Ausgabe
--debug # Debug-Informationen
--stop-on-failure # beim ersten Fehler stoppen
--stop-on-error # beim ersten Error stoppen
--stop-on-warning # bei erster Warnung stoppen
# Coverage & Berichte
--coverage-text # Text-Coverage-Bericht
--coverage-html=dir # HTML-Coverage-Bericht
--coverage-clover=file.xml # XML-Coverage-Bericht
# Testausführung
--group="groupName" # Tests einer Gruppe ausführen
--exclude-group="groupName" # Tests einer Gruppe ausschließen
--testsuite="suiteName" # spezifische Test-Suite ausführenBeispiele:
# spezifischen Test mit ausführlicher Ausgabe ausführen
./zmsbackend/zmsbackend-test --filter="StatusTest::testBasic" --verbose
./zmsbackend/zmsbackend-test --filter="StatusGetTest" --stop-on-failure
./zmsbackend/zmsbackend-test --coverage-text
./zmsbackend/zmsbackend-test --exclude-group="slow"Unit-Tests von zmscitizenview
Führe Frontend-Unit-Tests mit dem Vitest-/Jest-Setup des Moduls aus:
cd zmscitizenviewnpm testNach Testnamen-Muster filtern:
npm test -- -t "AppointmentView"zmsautomation
zmsautomation ist kein Unit-Test-Modul. Seine API-/UI-Test-Suiten sind in der zmsautomation-Dokumentation beschrieben.