Eiti prie turinio

Testavimas

Sąranka

Patikrink pakeitimą savo kompiuteryje prieš siųsdamas.

  • Pabaik sąranką. Go testai aptarnauja sukompiliuotą žiniatinklio programą, todėl pirmiausia ją sukompiliuok.

  • Vieną kartą įdiek testų naršyklę:

    Terminal window
    npx --prefix app/frontend playwright install chromium

Paleisk kasdienes patikras

Nuoroda į Paleisk kasdienes patikras
  1. Sukompiliuok ir patikrink Go kodą:

    Terminal window
    go build ./...
    go vet ./...
  2. Paleisk Go testus:

    Terminal window
    go test ./...
  3. Patikrink ir ištestuok žiniatinklio programą:

    Terminal window
    npm --prefix app/frontend run check
    npm --prefix app/frontend run lint
    npm --prefix app/frontend run test
  4. Paleisk sluoksnių ir failų išdėstymo taisykles:

    Terminal window
    go test -tags structure ./app/backend/tools/structurecheck

Turėtum pamatyti, kad nieko nenulūžo. CI vykdo tas pačias komandas, Go komandas su amd64 ir arm64, ir dar vieną paleidimą su race detektoriumi (go test -race ./...).

Paleisk end-to-end testus

Nuoroda į Paleisk end-to-end testus

End-to-end testai valdo tikrą naršyklę su tikra programa. Paleisk projektą sričiai, kurią lietei:

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

Paleidimas pats pasileidžia HolyArrs su švariu konfigūracijos aplanku. Projektas setup pirmiausia sukuria savininką, ir daugelis kitų projektų jo laukia. Prieš versiją paleisk visą rinkinį be --project.

Kuriuos projektus paleisti

Nuoroda į Kuriuos projektus paleisti
Ką pakeitei Paleisk
Filmus movies
Serialus shows
Prašymus requests, lists, reports
Atsisiuntimus sources, downloaders, downloads
Prisijungimą ir naudotojus accounts, kid
Būklę ir tvarkaraščius schedules, controls
Puslapio išdėstymą desktop, phone, a11y

Projektai įvardyti app/frontend/playwright.config.ts. Projektas, kuris priklauso nuo kito, pirmiausia paleidžia jį.

Kur dedamas naujas testas

Nuoroda į Kur dedamas naujas testas
Rūšis Kur
Go Šalia failo, kurį testuoja
Žiniatinklio unit Šalia savo failo, kaip name.test.ts
End-to-end app/tests/<module>/

Niekada nekviesk tikros išorinės paslaugos. Pridėk pakaitalą aplanke app/tests/fakes. Testas, kuris praeina tik tavo kompiuteryje, yra sugedęs.

Požymis. Struktūros patikra nepavyksta. Priežastis. Pranešime nurodytas failas ir taisyklė, kurią sulaužei. Sprendimas. Perkelk kodą arba perduok paprastus duomenis iš aukštesnio modulio. Žiūrėk modulius.

Požymis. End-to-end testai nepasileidžia. Priežastis. Neįdiegta testų naršyklė. Sprendimas. Vykdyk aukščiau esančią playwright install eilutę.

Požymis. Go testai nepavyksta dėl trūkstamų puslapių. Priežastis. Žiniatinklio programa nesukompiliuota. Sprendimas. Vykdyk npm --prefix app/frontend run build.

Build tag

Testas su tag paprastame go test ./... praleidžiamas. Kad jį paleistum, perduok -tags <tag>.

Tag Laiko
structure Sluoksnių, failų išdėstymo, SQL vietos ir komentarų taisykles tools/structurecheck
measure Atsisiuntimo laiko patikras
lab Testus su tikromis programomis bandymų lab. Jie skaito HOLYARRS_LAB_* ir praleidžiami, kai tų nėra
labms, livesubs Lab bandymus medijos serveriams ir gyvoms subtitrų svetainėms
Ilgi ir fault bandymai

CI juos paleidžia papildomai prie paprastų testų. Paleisk juos prieš versiją.

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
Kintamasis Ką daro
HOLYARRS_FAULT_OUT Failas, į kurį fault bandymai rašo savo lentelę
HOLYARRS_RESTART_TIMING, HOLYARRS_RESTART_TIMING_OUT Įjungia laiko matavimą nuo strigties iki prisijungimo ir nurodo jo išvesties failą
HOLYARRS_MEMORY, HOLYARRS_MEMORY_OUT Įjungia atminties bandymus ir nurodo jų išvesties failą
HOLYARRS_CRASH_RUNS, HOLYARRS_CRASH_SEED Ciklų skaičius ir seed strigčių ciklui app/backend/internal/mediafiles/dbtests (crash_test.go), kuris praleidžiamas su -short
Pakaitiniai serveriai ir kintamieji

End-to-end testai paleidžia pakaitinius serverius atsisiuntimo programoms, šaltiniams ir metaduomenų serveriui, todėl joks testas nepasiekia tikros paslaugos. Testai nustato kintamuosius, pavyzdžiui, HOLYARRS_TMDB_URL, HOLYARRS_MUSICBRAINZ_URL, HOLYARRS_PLEX_URL ir HOLYARRS_QBITTORRENT_URL, kad nukreiptų programą į juos. Tikram diegimui jų niekada nereikia.

API sutartis turi savo testus. TestOpenAPIGenerated nepavyksta, kai openapi.json nutolsta nuo maršrutų, o maršrutų lentelės momentinė kopija tools/structurecheck/testdata nepavyksta dėl bet kurio pridėto, pašalinto ar perkelto maršruto.

HolyArrs yra nemokama. Jei sutaupė tau laiko, pažymėk jį žvaigždute GitHub, paremk jį arba nupirk man kavos.