Zum Inhalt springen

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
  1. Baue den Go-Code und prüfe ihn mit vet:

    Terminal window
    go build ./...
    go vet ./...
  2. Führe die Go-Tests aus:

    Terminal window
    go test ./...
  3. Prüfe und teste die Web-App:

    Terminal window
    npm --prefix app/frontend run check
    npm --prefix app/frontend run lint
    npm --prefix app/frontend run test
  4. 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ühren

End-to-End-Tests steuern einen echten Browser gegen ein echtes Programm. Führe das Projekt für den Bereich aus, den du angefasst hast:

Terminal window
npm --prefix app/frontend run e2e -- --project=movies

Der 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.

Welche 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 funktioniert

Symptom. 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 Fortgeschrittene
Build-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.

Terminal window
go test -count=1 -run '^TestFault|^TestCrashInEveryLoopIsContained$' ./app/backend/cmd/holyarrs
HOLYARRS_RESTART_TIMING=1 go test -count=1 -run '^TestCrashRestartTime$' ./app/backend/cmd/holyarrs
HOLYARRS_MEMORY=1 go test -count=1 -timeout 30m -run '^TestMemoryPartsRuns$' ./app/backend/cmd/holyarrs
go 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 Seiten

HolyArrs ist kostenlos. Wenn es dir Zeit gespart hat, gib ihm einen Stern auf GitHub, unterstütze es als Sponsor oder spendier mir einen Kaffee.