Контрольный список ручного регрессионного тестирования WeChat Mini Program
Для пользователей (или мейнтейнеров), чтобы проходить проверки в инструментах разработчика WeChat. Сборочный smoke-тест гарантирует лишь, что WXSS валиден и проект компилируется; корректность поведения нужно проверять вручную — vitest выполняется в H5-семантике, а отличия событий и рендеринга на стороне MP им не проверяются.
Сборка:
pnpm dev:mp-weixin(илиpnpm build:mp-weixin), артефакт вdist/dev/mp-weixin(илиdist/build/mp-weixin) — откройте этот каталог в инструментах разработчика WeChat.Требование: базовая библиотека WeChat ≥ 2.25.2 (зависимость root-portal; на более старых версиях работает ветка деградации с фиксированным позиционированием внутри страницы — если нужно специально проверить путь деградации, переведите базовую библиотеку на версию ниже 2.25.2 и прогоните три пункта из раздела «Компоненты-слои» ещё раз).
Общая база (проверять на каждой странице)
| # | Пункт | Критерий прохождения |
|---|---|---|
| G1 | Открытие | Страница рендерится без белого экрана, нет ошибки «компонент не зарегистрирован» |
| G2 | Тёмная тема | Переключение тёмной темы на входе меняет цвета всех компонентов на странице (а не только фон) |
| G3 | Язык | Переключение языка на входе меняет тексты внутри компонентов (сообщения валидации form, тексты кнопок) |
| G4 | Консоль | На протяжении всего прохода нет console.error (особенно не должно быть предупреждения о «нет точки монтирования» от message/loading) |
Список компонентов
| Путь страницы | Компонент | Ключевые взаимодействия (помимо общей базы) |
|---|---|---|
pages/button/button | button | Клик с состоянием отжатия; loading / disabled / plain / round / circle / block рендерятся; у кнопки с иконкой glyph iconfont отображается |
pages/icon/icon | icon | Все 37 иконок отображаются (не пустые квадраты); size / color работают; иконка loading вращается |
pages/tag/tag | tag | Цвета каждого type корректны; переключение round / hit; closable срабатывает по клику и вызывает колбэк |
pages/input/input | input | Двусторонний v-model; стиль плейсхолдера применяется через placeholder-style (::placeholder не проверяем); textarea с авторазмером; подсчёт символов; clearable очищает; в состоянии error граница краснеет |
pages/switch/switch | switch | Переключение по клику с анимацией ползунка; loading / disabled не реагируют на клик; activeText/inactiveText отображаются |
pages/checkbox/checkbox | checkbox / checkbox-group | Одиночный выбор ставит галочку; множественный выбор в группе не влияет на соседние пункты; disabled не реагирует; полуотмеченное состояние indeterminate |
pages/radio/radio | radio / radio-group | Пункты взаимоисключающие (клик по другому снимает прежний); disabled не реагирует |
pages/form/form | form / form-item | Валидация по blur / input; текст ошибки нормально отображается в <text>; Promise из validate() корректно разрешается в кнопке «Отправить»; обязательные поля с звёздочкой |
pages/select/select | select | По клику открывается listbox (root-portal, слой над маской); выбор пункта по клику закрывает; clearable очищает; filterable — поле ввода внутри слоя; отсутствие клавиатурной навигации — нормально (удалено в MP) |
pages/tooltip/tooltip | tooltip | Клик по trigger открывает пузырёк; позиция соответствует placement (после измерения за два кадра, в первом кадре не должно быть мерцания или смещения); закрытие по клику вне; trigger="hover" в MP не должен срабатывать — это нормально |
pages/dialog/dialog | dialog | Открывается с маской и переходом; клик по маске закрывает при closeOnClick-modal; для bottom на полноэкранных устройствах работает safe-area-inset-bottom; Esc и lockScroll в MP не работают — это нормально; полноэкранный режим заливает весь экран |
pages/services/services | message / loading | См. следующий раздел |
message / loading: отдельные пункты
| # | Пункт | Критерий прохождения |
|---|---|---|
| S1 | Сообщения разных типов | Пять типов success / info / warning / danger / loading появляются, иконки и цвета правильные |
| S2 | Автозакрытие | По умолчанию исчезает через 3 секунды с переходом (не мгновенно) |
| S3 | Закрытие вручную | Тип loading не закрывается автоматически; исчезает только после handle.close() |
| S4 | Стопка сообщений | При нескольких вызовах подряд сообщения стопкой не перекрывают друг друга; при превышении max старые вытесняются |
| S5 | Полноэкранная маска | loading.show выводит полноэкранную маску; пока она висит, нижний слой не реагирует на клики |
| S6 | Колбэк закрытия | onClose срабатывает, когда сообщение исчезает |
| S7 | Предупреждение о точке монтирования | (Проверка специально: удалить <lh-message /> со страницы и вызвать) — в консоли должен быть явный console.error, без молчаливой деградации |
Известные «не-дефекты» платформы MP (не заводите баг, если столкнулись)
- select / dialog / tooltip без клавиатурной навигации / Esc / focus-trap / lockScroll — удаляются на этапе компиляции, см. Поддержка платформ.
trigger="hover"у tooltip не срабатывает на платформе MP — нет семантики hover, используйте click.- message / loading требуют точки монтирования — это дизайн, а не баг.
- icon рендерится шрифтом;
fill/strokeв CSS не работают, толькоcolor.
Запись результатов регрессии
Добавьте справа к таблицам колонку «Пройдено / Провалено (симптом)»; для провалившихся пунктов сначала приложите снимки панелей Console и WXML из инструментов разработчика, а затем сверьтесь с матрицей платформенных возможностей из docs/uniapp/uniapp组件库计划.md, чтобы определить, это «ожидаемая деградация» или настоящий дефект.