Тестирование
Настройка
Проверьте изменение на своём компьютере, прежде чем его отправлять.
Перед началом
Ссылка на «Перед началом»-
Пройдите Настройку. Тесты Go отдают собранное веб-приложение, поэтому сначала соберите его.
-
Один раз установите тестовый браузер:
Terminal window npx --prefix app/frontend playwright install chromium
Запустите повседневные проверки
Ссылка на «Запустите повседневные проверки»-
Соберите код Go и проверьте его через vet:
Terminal window go build ./...go vet ./... -
Запустите тесты Go:
Terminal window go test ./... -
Проверьте и протестируйте веб-приложение:
Terminal window npm --prefix app/frontend run checknpm --prefix app/frontend run lintnpm --prefix app/frontend run test -
Запустите правила слоёв и раскладки файлов:
Terminal window go test -tags structure ./app/backend/tools/structurecheck
Ни одна проверка не должна упасть. CI запускает те же команды, команды Go — на amd64 и arm64, плюс один прогон с детектором гонок (go test -race ./...).
Запустите сквозные тесты
Ссылка на «Запустите сквозные тесты»Сквозные тесты управляют настоящим браузером, который работает с настоящей программой. Запустите проект для той области, которую вы затронули:
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 запускает их поверх обычных тестов. Запустите их перед выпуском версии.
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| Переменная | Что делает |
|---|---|
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, станьте спонсором или угостите меня кофе.