Перейти до вмісту

Тестування

Налаштування

Перевір свою зміну на власному комп’ютері, перш ніж надсилати.

  • Пройди Налаштування. Тести Go віддають зібраний вебзастосунок, тож спершу збери його.

  • Один раз встанови браузер для тестів:

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

Запусти щоденні перевірки

Посилання на Запусти щоденні перевірки
  1. Збери й перевір код Go:

    Terminal window
    go build ./...
    go vet ./...
  2. Запусти тести Go:

    Terminal window
    go test ./...
  3. Перевір і протестуй вебзастосунок:

    Terminal window
    npm --prefix app/frontend run check
    npm --prefix app/frontend run lint
    npm --prefix app/frontend run test
  4. Запусти правила шарів і розташування файлів:

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

Збоїв бути не має. CI запускає ті самі команди, команди Go — на amd64 та arm64, плюс один запуск із детектором гонок (go test -race ./...).

Наскрізні тести керують справжнім браузером проти справжньої програми. Запусти проєкт для області, якої торкнувся:

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

Під час запуску стартує власний HolyArrs на свіжій теці конфігурації. Проєкт setup спершу створює власника, і більшість інших проєктів на нього чекають. Перед випуском запускай повний набір без --project.

Ти змінив Запусти
Фільми movies
Серіали shows
Запити requests, lists, reports
Завантаження sources, downloaders, downloads
Вхід і користувачі accounts, kid
Справність і розклади schedules, controls
Розкладка сторінок desktop, phone, a11y

Проєкти названо в app/frontend/playwright.config.ts. Проєкт, що залежить від іншого, спершу запускає його.

Вид Куди
Go Поруч із файлом, який він тестує
Модульний тест вебзастосунку Поруч зі своїм файлом, як name.test.ts
Наскрізний app/tests/<module>/

Ніколи не звертайся до справжнього зовнішнього сервісу. Додай заглушку в app/tests/fakes. Тест, що проходить лише на твоєму комп’ютері, зламаний.

Ознака. Не проходить структурна перевірка. Причина. Повідомлення називає файл і правило, яке ти порушив. Рішення. Перенеси код або передай прості дані з вищого модуля. Дивись Модулі.

Ознака. Наскрізні тести не запускаються. Причина. Не встановлено браузер для тестів. Рішення. Виконай рядок playwright install вище.

Ознака. Тести Go падають через відсутні сторінки. Причина. Вебзастосунок не зібрано. Рішення. Виконай npm --prefix app/frontend run build.

Теги збірки

Тест із тегом пропускається у звичайному go test ./.... Передай -tags <tag>, щоб його запустити.

Тег Що містить
structure Правила шарів, розташування файлів, розміщення SQL і коментарів у tools/structurecheck
measure Перевірки часу завантаження
lab Тести проти справжніх застосунків у тестовій лабораторії. Вони читають HOLYARRS_LAB_* і пропускаються, коли їх не задано
labms, livesubs Лабораторні запуски для медіасерверів і живих сайтів субтитрів
Довгі запуски та запуски зі збоями

CI запускає їх поверх звичайних тестів. Запускай їх перед випуском.

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
Змінна Що робить
HOLYARRS_FAULT_OUT Файл, у який запуски зі збоями пишуть свою таблицю
HOLYARRS_RESTART_TIMING, HOLYARRS_RESTART_TIMING_OUT Вмикають вимірювання часу від збою до входу й називають його вихідний файл
HOLYARRS_MEMORY, HOLYARRS_MEMORY_OUT Вмикають запуски з пам’яттю й називають їхній вихідний файл
HOLYARRS_CRASH_RUNS, HOLYARRS_CRASH_SEED Кількість раундів і зерно для циклу збоїв у app/backend/internal/mediafiles/dbtests (crash_test.go), який пропускається під -short
Сервери-заглушки та змінні

Наскрізні тести запускають сервери-заглушки для завантажувачів, джерел і сервера метаданих, тож жоден тест не звертається до справжнього сервісу. Тести задають змінні, як-от HOLYARRS_TMDB_URL, HOLYARRS_MUSICBRAINZ_URL, HOLYARRS_PLEX_URL і HOLYARRS_QBITTORRENT_URL, щоб спрямувати програму на них. Справжній установці вони ніколи не потрібні.

Контракт API має власні тести. TestOpenAPIGenerated падає, коли openapi.json розходиться з маршрутами, а знімок таблиці маршрутів у tools/structurecheck/testdata падає при будь-якому доданому, прибраному чи переміщеному маршруті.

HolyArrs безкоштовний. Якщо він заощадив тобі час, познач його зіркою на GitHub, підтримай проєкт або пригости мене кавою.