Skip to content

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

Mit DDEV

bash
ddev ssh
bash
cd {zmsadmin, zmscalldisplay, zmsdldb, zmsentities, zmsmessaging, zmsslim, zmsstatistic, zmsticketprinter}
bash
./vendor/bin/phpunit

Mit Podman

bash
podman exec -it zms-web bash
bash
cd {zmsadmin, zmscalldisplay, zmsdldb, zmsentities, zmsmessaging, zmsslim, zmsstatistic, zmsticketprinter}
bash
./vendor/bin/phpunit

Nützliche Flags für ./vendor/bin/phpunit:

bash
--display-warnings
--display-deprecations
--display-notices
--display-errors
--display-failures
--debug

Sonderfälle (zmsapi, zmsdb & 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).

Mit Docker:

bash
cd zmsclient
docker-compose down && docker-compose up -d && docker exec zmsclient-test-1 ./vendor/bin/phpunit

Mit Podman:

bash
cd zmsclient
./zmsclient-test
./zmsclient-test --filter "testSetKeyBasic"

Das Skript zmsclient-test erkennt und nutzt automatisch Docker oder Podman, startet die Container für einen sauberen Zustand neu und führt die PHPUnit-Tests aus.

Traditionelle Methode (überschreibt lokale DB)

Für die Module zmsapi und zmsdb müssen Testdaten importiert werden. Beachte, dass dabei deine lokale Datenbank überschrieben wird.

zmsapi:

Mit DDEV:

bash
cd zmsapi
rm -rf data
ln -s vendor/eappointment/zmsdb/tests/Zmsdb/fixtures data
ddev ssh
cd zmsapi
vendor/bin/importTestData --commit
./vendor/bin/phpunit

Mit Podman:

bash
cd zmsapi
rm -rf data
ln -s vendor/eappointment/zmsdb/tests/Zmsdb/fixtures data
podman exec -it zms-web bash
cd zmsapi
vendor/bin/importTestData --commit
./vendor/bin/phpunit

zmsdb:

Mit DDEV:

bash
ddev ssh
cd zmsdb
bin/importTestData --commit
./vendor/bin/phpunit

Mit Podman:

bash
podman exec -it zms-web bash
cd zmsdb
bin/importTestData --commit
./vendor/bin/phpunit

PHP-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:

bash
# Web-Container betreten
podman exec -it zms-web bash  # Podman
ddev ssh                      # DDEV

# zmsdb-Tests ausführen
./zmsdb/zmsdb-test                    # alle Tests
./zmsdb/zmsdb-test --filter="StatusTest::testBasic"  # spezifischen Test

# zmsapi-Tests ausführen
./zmsapi/zmsapi-test                   # alle Tests
./zmsapi/zmsapi-test --filter="StatusGetTest::testRendering"  # spezifischen Test

Verfügbare PHPUnit-Flags:

bash
# 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ühren

Beispiele:

bash
# spezifischen Test mit ausführlicher Ausgabe ausführen
bash zmsdb-test --filter="StatusTest::testBasic" --verbose

# alle Tests einer Klasse, beim ersten Fehler stoppen
bash zmsapi-test --filter="StatusGetTest" --stop-on-failure

# Tests mit Coverage-Bericht ausführen
bash zmsdb-test --coverage-text

# Tests ausführen und eine Gruppe ausschließen
bash zmsapi-test --exclude-group="slow"

Unit-Tests von zmscitizenview

Führe Frontend-Unit-Tests mit dem Vitest-/Jest-Setup des Moduls aus:

bash
cd zmscitizenview
bash
npm test

Nach Testnamen-Muster filtern:

bash
npm test -- -t "AppointmentView"

zmsautomation

zmsautomation ist kein Unit-Test-Modul. Seine API-/UI-Test-Suiten sind in der zmsautomation-Dokumentation beschrieben.