Перейти к содержимому

Тестирование

Настройка

Проверьте изменение на своём компьютере, прежде чем его отправлять.

  • Пройдите Настройку. Тесты Go отдают собранное веб-приложение, поэтому сначала соберите его.

  • Один раз установите тестовый браузер:

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

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

Ссылка на «Запустите повседневные проверки»
  1. Соберите код Go и проверьте его через vet:

    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 Число раундов и 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, станьте спонсором или угостите меня кофе.