Testen
Einrichtung
Prüfe deine Änderung auf deinem Rechner, bevor du sie schickst.
Bevor du beginnst
Link zu Bevor du beginnst-
Schließe die Einrichtung ab. Die Go-Tests liefern die gebaute Web-App aus, baue sie also zuerst.
-
Installiere einmal den Testbrowser:
Terminal window npx --prefix app/frontend playwright install chromium
Die alltäglichen Prüfungen ausführen
Link zu Die alltäglichen Prüfungen ausführen-
Baue den Go-Code und prüfe ihn mit vet:
Terminal window go build ./...go vet ./... -
Führe die Go-Tests aus:
Terminal window go test ./... -
Prüfe und teste die Web-App:
Terminal window npm --prefix app/frontend run checknpm --prefix app/frontend run lintnpm --prefix app/frontend run test -
Führe die Regeln für Schichten und Dateiaufbau aus:
Terminal window go test -tags structure ./app/backend/tools/structurecheck
Du solltest keinen Fehlschlag sehen. CI führt dieselben Befehle aus, die für Go auf amd64 und arm64, dazu einen Lauf mit dem Race-Detektor (go test -race ./...).
Die End-to-End-Tests ausführen
Link zu Die End-to-End-Tests ausführenEnd-to-End-Tests steuern einen echten Browser gegen ein echtes Programm. Führe das Projekt für den Bereich aus, den du angefasst hast:
npm --prefix app/frontend run e2e -- --project=moviesDer Lauf startet sein eigenes HolyArrs mit einem frischen Konfigurationsordner. Das Projekt setup legt zuerst den Besitzer an, und die meisten anderen Projekte warten darauf. Führe vor einer Veröffentlichung die ganze Suite ohne --project aus.
Optionen
Link zu OptionenWelche Projekte du ausführst
Link zu Welche Projekte du ausführst| Du hast geändert | Führe aus |
|---|---|
| Filme | movies |
| Serien | shows |
| Anfragen | requests, lists, reports |
| Downloads | sources, downloaders, downloads |
| Anmeldung und Benutzer | accounts, kid |
| Zustand und Zeitpläne | schedules, controls |
| Seitenaufbau | desktop, phone, a11y |
Die Projekte sind in app/frontend/playwright.config.ts benannt. Ein Projekt, das von einem anderen abhängt, führt dieses zuerst aus.
Wohin ein neuer Test gehört
Link zu Wohin ein neuer Test gehört| Art | Wohin |
|---|---|
| Go | Neben die Datei, die er testet |
| Web-Unit-Test | Neben seine Datei, als name.test.ts |
| End-to-End | app/tests/<module>/ |
Rufe nie einen echten externen Dienst auf. Lege einen Ersatz unter app/tests/fakes an. Ein Test, der nur auf deinem Rechner durchläuft, ist kaputt.
Wenn es nicht funktioniert
Link zu Wenn es nicht funktioniertSymptom. Eine Strukturprüfung schlägt fehl. Ursache. Die Meldung nennt die Datei und die Regel, die du verletzt hast. Lösung. Verschiebe den Code oder reiche einfache Daten aus dem höheren Modul herein. Siehe Module.
Symptom. Die End-to-End-Tests starten nicht.
Ursache. Der Testbrowser ist nicht installiert.
Lösung. Führe die Zeile mit playwright install von oben aus.
Symptom. Die Go-Tests scheitern an fehlenden Seiten.
Ursache. Die Web-App ist nicht gebaut.
Lösung. Führe npm --prefix app/frontend run build aus.
Für Fortgeschrittene
Link zu Für FortgeschritteneBuild-Tags
Ein Test mit einem Tag wird bei einem einfachen go test ./... übersprungen. Übergib -tags <tag>, um ihn auszuführen.
| Tag | Enthält |
|---|---|
structure |
Die Regeln für Schichten, Dateiaufbau, SQL-Platzierung und Kommentare in tools/structurecheck |
measure |
Zeitmessungen für Downloads |
lab |
Tests gegen echte Apps in einer Testumgebung. Sie lesen HOLYARRS_LAB_* und werden übersprungen, wenn diese nicht gesetzt sind |
labms, livesubs |
Läufe in der Testumgebung für Medienserver und echte Untertitel-Seiten |
Lange Läufe und Fehlerläufe
CI führt diese zusätzlich zu den einfachen Tests aus. Führe sie vor einer Veröffentlichung aus.
go test -count=1 -run '^TestFault|^TestCrashInEveryLoopIsContained$' ./app/backend/cmd/holyarrsHOLYARRS_RESTART_TIMING=1 go test -count=1 -run '^TestCrashRestartTime$' ./app/backend/cmd/holyarrsHOLYARRS_MEMORY=1 go test -count=1 -timeout 30m -run '^TestMemoryPartsRuns$' ./app/backend/cmd/holyarrsgo test -count=1 -run '^TestDownloaderConformance$' ./app/backend/internal/downloads| Variable | Aufgabe |
|---|---|
HOLYARRS_FAULT_OUT |
Datei, in die die Fehlerläufe ihre Tabelle schreiben |
HOLYARRS_RESTART_TIMING, HOLYARRS_RESTART_TIMING_OUT |
Schalten die Zeitmessung vom Absturz bis zur Anmeldung ein und benennen ihre Ausgabedatei |
HOLYARRS_MEMORY, HOLYARRS_MEMORY_OUT |
Schalten die Arbeitsspeicherläufe ein und benennen ihre Ausgabedatei |
HOLYARRS_CRASH_RUNS, HOLYARRS_CRASH_SEED |
Runden und Seed für die Absturzschleife in app/backend/internal/mediafiles/dbtests (crash_test.go), die unter -short übersprungen wird |
Ersatzserver und Variablen
End-to-End-Tests starten Ersatzserver für Downloader, Quellen und den Metadaten-Server, damit kein Test einen echten Dienst erreicht. Die Tests setzen Variablen wie HOLYARRS_TMDB_URL, HOLYARRS_MUSICBRAINZ_URL, HOLYARRS_PLEX_URL und HOLYARRS_QBITTORRENT_URL, um das Programm auf sie zu lenken. Eine echte Installation braucht sie nie.
Der API-Vertrag hat eigene Tests. TestOpenAPIGenerated schlägt fehl, wenn openapi.json von den Routen abweicht, und der Schnappschuss der Routentabelle in tools/structurecheck/testdata schlägt bei jeder hinzugefügten, entfernten oder verschobenen Route fehl.
Verwandte Seiten
Link zu Verwandte SeitenHolyArrs ist kostenlos. Wenn es dir Zeit gespart hat, gib ihm einen Stern auf GitHub, unterstütze es als Sponsor oder spendier mir einen Kaffee.