Skip to main content
Справочник по тестовым утилитам, шаблонам и обеспечению соблюдения правил линтинга для плагинов OpenClaw.
Ищете примеры тестов? Практические руководства содержат подробные примеры тестов: Тесты плагинов каналов и Тесты плагинов провайдеров.

Тестовые утилиты

Эти подпути являются локальными точками входа в исходный код репозитория для тестов собственных встроенных плагинов OpenClaw. Они не публикуются как экспорты package.json для сторонних плагинов и могут импортировать Vitest или другие тестовые зависимости, доступные только в репозитории.
Используйте эти специализированные подпути для тестов встроенных плагинов. Прежний объединяющий модуль openclaw/plugin-sdk/testing был локальным для репозитория, исключался из поставляемых пакетов и был удалён. Устаревший псевдоним openclaw/plugin-sdk/test-utils остаётся локальным для репозитория; pnpm run lint:plugins:no-extension-test-core-imports (scripts/check-no-extension-test-core-imports.ts) отклоняет новые импорты этого псевдонима в тестах расширений.

Доступные экспорты

Наборы тестов контрактов встроенных плагинов также используют эти тестовые подпути SDK для вспомогательных функций реестра, манифеста, публичных артефактов и фикстур среды выполнения, предназначенных только для тестов. Наборы тестов только для ядра, зависящие от встроенного реестра OpenClaw, остаются в src/plugins/contracts.

Типы

Подпути для специализированного тестирования также реэкспортируют типы, полезные в тестовых файлах:

Тестирование разрешения целей

Используйте installCommonResolveTargetErrorCases, чтобы добавить стандартные случаи ошибок разрешения целей канала:

Шаблоны тестирования

Тестирование контрактов регистрации

Модульные тесты, передающие написанный вручную мок api в register(api), не проверяют условия допуска загрузчика OpenClaw. Добавьте хотя бы один смоук-тест с использованием загрузчика для каждой поверхности регистрации, от которой зависит ваш плагин, особенно для хуков и эксклюзивных возможностей, таких как память. Настоящий загрузчик отклоняет регистрацию плагина, если отсутствуют обязательные метаданные или плагин вызывает API возможности, которой он не владеет. Например, api.registerHook(...) требует имя хука, а api.registerMemoryCapability(...) требует, чтобы манифест плагина или экспортируемая точка входа объявляли kind: "memory".

Тестирование доступа к конфигурации среды выполнения

Предпочитайте общий мок среды выполнения плагина из openclaw/plugin-sdk/plugin-test-runtime. Его моки runtime.config.loadConfig() и runtime.config.writeConfigFile(...) по умолчанию выбрасывают исключение, чтобы тесты выявляли новое использование устаревших API совместимости. Переопределяйте эти моки только тогда, когда тест явно проверяет устаревшее поведение совместимости.

Модульное тестирование плагина канала

Модульное тестирование плагина провайдера

Создание мока среды выполнения плагина

Для кода, использующего createPluginRuntimeStore, создайте мок среды выполнения в тестах:

Тестирование с заглушками отдельных экземпляров

Предпочитайте заглушки отдельных экземпляров изменению прототипа:

Контрактные тесты (плагины в репозитории)

Встроенные плагины имеют контрактные тесты, проверяющие владение регистрацией:
Эти тесты проверяют:
  • Какие плагины регистрируют каких провайдеров
  • Какие плагины регистрируют каких провайдеров речи
  • Корректность структуры регистрации
  • Соответствие контракту среды выполнения

Запуск тестов для выбранной области

Для конкретного плагина:
Только для контрактных тестов:

Проверки линтера (плагины в репозитории)

scripts/run-additional-boundary-checks.mjs запускает в CI набор проверок границ импорта lint:plugins:*; каждую из них также можно запускать локально отдельно: Эти правила линтера не распространяются на внешние плагины, однако рекомендуется придерживаться тех же шаблонов.

Конфигурация тестирования

OpenClaw использует Vitest 4 с информационными отчетами о покрытии V8. Для тестов плагинов:
Если локальные запуски создают чрезмерную нагрузку на память:

Связанные материалы