Перейти к содержанию

Проверки

Проверки и зависимости

Каждая проверка включается в [checks]: on, auto (по умолчанию) или off. Если зависимости нет, то:

  • в режиме on прогон завершается сбоем инфраструктуры (код 2) с названием недостающего;
  • в режиме auto проверка не выполняется, а сводка, JUnit (skipped) и Problems пишут «не проверено» с причиной и с тем, что теряется;
  • в режиме off проверка не выполняется, в сводке остаётся одна строка «выключено настройкой».
Проверка Что Нужно
metadata ссылки на метаданные, формы, обработчики, экспортные методы; зависимые модули (вызовы изменённых экспортов) — off выключает и их пробы —
analyzers новые замечания анализатора BSL по правке BSL LS или bsl-analyzer (environment.analyzer)
platform-api методы и типы платформы, доступность по контексту справка установленной платформы
probes-server компиляция на сервере и во внешнем соединении копия ИБ; COM или YAxUnit
probes-client компиляция в тонком клиенте копия ИБ, YAxUnit
queries разбор запросов платформой копия ИБ; COM или YAxUnit
extcheck расширенная проверка изменённых модулей: общих, в выгрузке Конфигуратора — и управляемых форм, объектов, менеджеров, наборов записей; все режимы, включая веб-клиент копия ИБ
scenarios сценарные тесты по изменённым методам копия ИБ, YAxUnit
smoke открытие изменённых форм копия ИБ, YAxUnit

otk doctor показывает, что найдено на машине, какие проверки доступны и что теряется без остальных. Недоступна проверка в режиме on — doctor завершается с кодом 2.

Справку синтакс-помощника для platform-api ОТК индексирует сам из установленных платформ (несколько секунд при первом обращении; изменились .hbk — индекс перестраивается). Своей версии нет — берётся индекс в кэше или ближайшая версия той же линейки, о подмене — примечание в сводке. Серверу без клиента (.hbk нет) — копия справки в environment.helpDir (каталог с именем версии) или otk platform-help build --from <каталог с .hbk> [--version 8.3.27.2342]; otk platform-help status — какие индексы есть и актуальны ли. helpAuto = false — индекс сам не строится (воспроизводимый CI), вместо этого предупреждение с командой. Доступность методов, свойств и типов (Новый …) по контекстам (сервер, клиент, внешнее соединение, веб-клиент) берётся из таблиц, построенных Конфигуратором: в поставке 8.3.27, 8.5.1 и 8.5.4; для другой платформы берётся ближайшая таблица той же линейки. Точную строит otk availability build: временное расширение в копии ИБ проекта, около минуты. Индекс и таблицы лежат в кэше пользователя: OTK_CACHE, иначе %LOCALAPPDATA%/otk или ~/.cache/otk.

Как добавить свою проверку (исполнитель в базе или правило статики) — adding-a-check.md; коды находок и как их исправить — справочник находок.

Без YAxUnit полная проверка работает: сервер и запросы проверяются через COM, а тонкий клиент, формы и сценарии получают «не проверено».

Анализаторы BSL

Какие замечания BSL LS — ошибки, а какие предупреждения, — «Сводка и коды выхода»; что ловит каждый анализатор на контрольных дефектах — comparison.md.

Проверка analyzers работает через адаптер: environment.analyzer = "bslls" (BSL LS, по умолчанию), "bsl-analyzer" или "both" (--analyzer). bsl-analyzer видит всю конфигурацию: «после» — дерево выгрузки целиком (у расширения — с основной конфигурацией из parent), разбор ограничен изменёнными модулями; «до» — зеркало дерева на ссылках, где изменённые модули возвращены к базе (исходники не меняются). Поэтому кроме общих правил он ловит новый вызов несуществующего метода, неверное число аргументов, неизвестное поле, поле запроса, серверный метод на клиенте (bsla:<Правило>, пока предупреждения; сделать ошибкой — [analyzerSeverity]), а старые такие замечания модуля новыми не считает. Родной файл настроек анализатора ОТК пишет сам во временный каталог: за основу — bsl-analyzer.toml или .bsl-language-server.json репозитория, поверх — minPlatform и compatWarnings из otk.toml; своего файла нет — критические правила и семантика. При both одно замечание обоих анализаторов — одна находка, замечания только одного из них подсчитаны в примечаниях. Выбор можно задать по формату выгрузки: [environment.analyzer] с ключами designer-xml и edt (формата нет в таблице — bslls; --analyzer задаёт выбор для всех форматов). Какие форматы понимает анализатор, ОТК знает сам: bsl-analyzer 0.3.2 — только designer-xml (метаданные .mdo не читает, на защищённых модулях падает), поэтому при both на EDT работает один BSL LS (с примечанием), а явный bsl-analyzer для EDT — «не проверено» с причиной.

Правила BSL LS по событиям (EventHandlerInvalidSignature, EventHandlerOutsideEventRegion) работают только со справкой платформы (shcntx_ru.hbk). ОТК передаёт анализатору справку платформы проверки (environment.platform или установленная), иначе — копию из environment.helpDir; ключ v8platform.binPath своей .bsl-language-server.json главнее. Без справки (Linux без платформы, контейнер) эти правила не работают — об этом примечание в сводке.

Сценарные тесты

Тесты на логику пишет пользователь — обычные тесты YAxUnit в тестовом расширении проекта tests/cfe/<имя> (выгрузка Конфигуратора; эту же раскладку показывает панель тестов VS Code «1C: Platform Tools»). ОТК их не придумывает, а выбирает: тест привязывается к методу тегом с полным именем метода — ИмяОбщегоМодуля.Метод (для других модулей — Справочник.Клиенты.Метод), тег модуля — его имя:

Процедура ИсполняемыеСценарии() Экспорт
    ЮТТесты
        .ДобавитьТест("СхемаHttpЗаменяетсяНаHttps", "http:// -> https://",
            "демо_КлиентСервер.НормализованнаяСсылкаНаЗапись")
        .ДобавитьТест("ПроведениеДокумента").Тег("Документ.Продажа.ОбработкаПроведения")
            .ВТранзакции();
КонецПроцедуры

gate запускает только тесты с тегами изменённых методов (фильтр tags YAxUnit), --all-scenarios — все; тестов к изменению нет — «0 сценариев», клиент не запускается. Тестовые расширения загружаются в свою копию ИБ ОТК (повторно — только при изменении). Данные тест не должен оставлять: ВТранзакции(), УдалениеТестовыхДанных() YAxUnit. Упавший тест — ошибка сводки с местом в тестовом модуле и текстом утверждения. Каталог — [scenarios] path (по умолчанию tests/cfe). В рабочую базу хуком Platform Tools сценарии не ставятся.

Движок YAxUnit ОТК ставит в свою копию ИБ сам (environment.yaxunit). Исходники движка, которые кладёт команда Platform Tools «Добавить YAxUnit» (tests/cfe/YAXUNIT), и расширения без тестов при поиске сценариев пропускаются; tests/cfe/YAXUNIT удобно внести в .gitignore. Чтобы запускать тесты из панели тестов VS Code, в базу профиля нужно загрузить движок и тестовое расширение («Загрузить тестовые расширения») — без движка 1С открывается и ждёт, отчёта нет.

Заготовки тестов

otk scaffold [--base <ref>] [--head <ref>] [--extension <имя>] [--no-draft] — изменённым методам (по умолчанию: рабочее дерево с незакоммиченным против [hook] base), у которых нет теста с их тегом, добавляет каркас теста в тестовое расширение: регистрацию ЮТТесты.ДобавитьТест(…, "<Модуль>.<Метод>") и процедуру с подсказкой вызова. Тестовый модуль — <префикс тестового расширения><имя модуля> (одноимённый модуль дополняется, существующие процедуры не трогаются); тестового расширения нет — создаётся tests/cfe/Тесты. Каркас помечен ЮТест.Пропустить, пока тест не написан: в сводке gate он «не проверено», а не «пройдено».

Черновик вместо пустого каркаса — внешняя команда [scaffold] draft (лучше в otk.local.toml): на stdin она получает JSON о методе (модуль, имя, параметры, контексты, текст метода), на stdout возвращает тело процедуры теста. ОТК ИИ не встраивает — пример для Claude Code: scaffold/draft-claude.py; подойдёт любой инструмент с тем же протоколом. Ошибка команды — пустой каркас.

Дымовой тест форм

Изменённые управляемые формы — изменён модуль формы или её Form.xml — ОТК открывает и закрывает в тонком клиенте своей копии ИБ (отдельным запуском клиента после проб). Ловится то, чего не видно без открытия: ошибки в обработчиках ПриОткрытии, ПриЗакрытии и вызываемом из них коде (платформа не передаёт их в Открыть(), а пишет в журнал регистрации — ОТК берёт их оттуда по кадру формы в стеке), а также форма, которая не закрывается: модальное окно, вопрос пользователю, долгий обработчик. Такую форму ОТК ждёт [smoke] timeout секунд (по умолчанию 60), завершает клиент и проверяет оставшиеся формы новым запуском.

  • Форма, которая без параметров отказывается открываться (Отказ в ПриСозданииНаСервере), — «не проверено».
  • Ошибка при открытии — ошибка сводки ([smoke] severity = "warning" — предупреждение).
  • [smoke] exclude — шаблоны полных имён форм, которые не открывать ("Обработка.*", "*.ФормаНастроек"); [checks] smoke = "off" — выключить.
  • Форма открывается с данными копии ИБ: обработчики, зависящие от данных или настроек, ведут себя как в этой базе. Копия без начального заполнения (пустая база, первый запуск не выполнен) даёт ложные ошибки: на пустой 1С:ERP формы документа и справочника не открываются («Не удалось заполнить поле "Организация"», «Преобразование значения к типу Булево»). Для дымового теста берите копию с заполненной базой или ставьте [smoke] severity = "warning".