Тесты

Четыре вида тестов, от быстрых к медленным. Все работают в Linux; сквозным тестам нужен экран или Xvfb.

Модульные и интеграционные тесты

npm test                         # vitest: tests/unit, tests/integration, tests/corpus
npx vitest run tests/unit/wiki.test.ts   # один файл
  • tests/unit: по одному модулю: движок команд, кодек workflow, проверка «только чтение», миграции, тексты, уроки, вики.
  • tests/integration: несколько модулей вместе с настоящей базой SQLite: чат, который строит граф, ход, который встречает правку человека, синхронизация с поддельным MCP-сервером (tests/fixtures/mcp).
  • Вместо настоящей модели отвечает модель с заготовленными ответами (src/main/testLLMTransport.ts); в сеть ничего не уходит.
  • Модульный тест считается зависшим через 30 секунд (testTimeout в vitest.config.ts). Под большой нагрузкой несколько медленных тестов всё же могут в него упереться; запускайте их отдельно или с --testTimeout=60000.
  • Пределы времени: npm test только записывает, сколько идёт тест большого каталога, потому что жёсткий предел на занятой машине иногда срабатывает зря. npm run test:perf (PERF_BUDGETS=1) запускает тот же тест с пределами.
npm run test:perf                # пределы времени tests/unit/largeCatalog.test.ts

Проверка типов и lint

npm run type-check               # main, renderer и тесты
npm run type-check:tests         # только тесты (tsconfig.tests.json)
npm run lint                     # ESLint по src, tests, scripts и forge.config.js (eslint.config.mjs)

Сквозные тесты

Они запускают собранное приложение в Electron через Playwright. Тест запускает приложение через launchApp() из tests/e2e/support/app.ts, а не сам: она даёт приложению временный профиль через --user-data-dir (удаляется при закрытии; NODEWISE_KEEP_PROFILES=1 оставляет его, чтобы посмотреть), поэтому тест никогда не читает и не пишет профиль того, кто его запускает. Сначала npm run build, иначе тесты проверяют старый код. NODEWISE_PACKAGED_PROVIDERS=1 заставляет запуск без упаковки предлагать ровно тех помощников, что и установленное приложение (без проверочного режима TEST); им пользуется npm run shots:public для публичных снимков экрана.

npm run build
xvfb-run -a npx playwright test --trace off --grep-invert "live-local|layout-walk"   # всё, кроме обхода
xvfb-run -a npx playwright test tests/e2e/about-help.test.ts --trace off              # один файл

Тесты live-local говорят с настоящим сервером модели на этом компьютере (127.0.0.1:18080) и пропускаются, если там никто не слушает.

Обход экранов

tests/e2e/layout-walk.test.ts открывает каждый экран при нескольких размерах окна и ищет то, что вылезло из своего блока, обрезано, ушло за край окна, наехало на соседа или сжато до нечитаемого, и читает каждый текст: нет ли незаполненной вставки, «undefined» или голого ключа. Ещё он проверяет, что карточка-описание стоит у своей ноды и шириной с неё при любом масштабе. Запускайте его отдельно: он подолгу держит открытыми меню, а второе окно приложения закрыло бы их.

xvfb-run -a npx playwright test tests/e2e/layout-walk.test.ts --trace off
LAYOUT_FULL=1 xvfb-run -a npx playwright test tests/e2e/layout-walk.test.ts --trace off      # все размеры
LAYOUT_LANG=en …           # по-английски (по умолчанию по-русски, тексты длиннее)
LAYOUT_TEXT=wide …         # текст шире на 4 %
LAYOUT_DPR=1.5 …           # масштаб экрана 150 %
LAYOUT_FONTS=hinted …      # шрифты с хинтингом
LAYOUT_SIZES=800x560,1400x860 …   # только эти размеры окна
LAYOUT_ONLY=canvas,helper …       # только эти части
LAYOUT_OUT=<папка> …              # сохранить отчёт и снимки

tests/e2e/layout-audit.test.ts проверяет сам обход на нарочно сломанной и на правильной странице. tests/e2e/node-size.test.ts рисует каждую ноду каталога и сравнивает её высоту с той, что приложение рассчитало заранее (по ней ставятся новые ноды).

Набор workflow

tests/corpus/workflowRoundTrip.test.ts открывает каждый workflow ComfyUI в названных папках, сохраняет обратно и сравнивает, затем правит каждый так, как это делает холст, и проверяет, что в сохранённом файле ровно эта правка:

WORKFLOW_CORPUS=/path/a:/path/b npx vitest run tests/corpus

Без WORKFLOW_CORPUS он пропускается.

Вики

tests/unit/wiki.test.ts проверяет, что у каждой страницы есть оба языка, ссылка на другой язык в первой строке и путь во второй, что каждая относительная ссылка ведёт на файл, что каждое оглавление перечисляет свои страницы и что у каждого урока есть страница. WIKI_STRICT=1 npx vitest run tests/unit/wiki.test.ts перед выпуском падает ещё и тогда, когда остался комментарий verify или skeleton (комментарий HTML, который начинается с одного из этих слов и двоеточия).

Что запускает CI

  • .github/workflows/ci.yml на каждый запрос на слияние и каждый пуш в основную ветку: проверка списка изменений, node scripts/public-tree-check.js, npm ci, проверка типов, модульные и интеграционные тесты и сборка; вторая задача собирает приложение и проходит короткий список сквозных сценариев (правка, файлы, приватность, проверка и список уроков) под Xvfb. У него права только на чтение и нет секретов.
  • .github/workflows/release.yml по тегам, вручную и раз в неделю: сквозные тесты, обходы экранов, четыре пакета и их проверки, проверка обновления, затем выпуск. Выпуск версии

См. также

Страница перенесена из wiki репозитория приложения (docs/wiki/dev/Testing.ru.md, ревизия b8e3f71). То же руководство встроено в приложение: «Справка ▸ Руководство».

Чтобы обновить её, выполните npm run import, а затем npm run build в папке сайта.