# Как запускать тесты Часть набора проверок HY2XS. Карта всех частей — [docs/testing/README.md](README.md). ## Цель набора Зафиксировать checklist для двухслойной схемы «builder layer + runtime/target layer». ## Команды ```bash # Юнит-тесты и типы оркестратора cd orchestrator && bun install --frozen-lockfile && bun run check && bun test # Тесты и статический анализ HY2XS admin cd apps && go vet ./... && go test ./... # Проверка типов и сборка frontend cd apps/frontend && pnpm install --frozen-lockfile && pnpm run verify # Dependency-free контракты панели bun test tools/test/frontend-sprite.test.ts tools/test/frontend-contract.test.ts # Runtime-компиляция всех RU/EN-сообщений реальным vue-i18n cd apps/frontend && bun test test/i18n-runtime.test.ts # Сверка среды разработки с versions.env (ничего не меняет) ./tools/dev/doctor.sh # Полный E2E с реальным клиентом Hysteria (Debian 13 amd64; нужен Go) HYSTERIA_BIN=/usr/local/bin/hysteria ./tools/test/e2e-hysteria.sh # Production-сборка: прогоняет тесты, резолвер и compatibility gate ./tools/build/build.sh ``` `build.sh` останавливается, если падают тесты оркестратора, контрактные тесты панели, тесты админки или compatibility gate. ## Почему контракты панели проверяет Bun, а не vitest Dependency-free модули (`SvgIcon/symbol.ts`, frontend constants и словари локализации) намеренно чистые: ни Vite, ни DOM в них нет. Отдельный `i18n-runtime.test.ts` запускается после `pnpm install`, потому что обязан использовать именно `vue-i18n` из frozen lock-графа. Он обходит каждую строку обоих словарей и считает отказом и исключение, и compiler diagnostics в `console.error`. Vitest с jsdom не вычисляет `currentColor` и визуальной корректности всё равно не доказал бы, зато привёл бы в граф `pnpm audit` — а его порог считается по ВСЕМУ lock-файлу frontend — сотню транзитивных зависимостей ради нулевой дополнительной гарантии. Визуальная часть остаётся ручной и фиксируется в отчёте приёмки, см. [docs/acceptance/README.md](../acceptance/README.md).