Skip to main content
Dokumentacja narzędzi testowych, wzorców i wymuszania reguł lintowania dla pluginów OpenClaw.
Szukasz przykładów testów? Przewodniki zawierają kompletne przykłady testów: Testy pluginów kanałów oraz Testy pluginów dostawców.

Narzędzia testowe

Te ścieżki podrzędne są lokalnymi punktami wejścia kodu źródłowego repozytorium dla testów własnych, dołączonych pluginów OpenClaw. Nie są publikowanymi eksportami package.json przeznaczonymi dla pluginów innych firm i mogą importować Vitest lub inne zależności testowe dostępne wyłącznie w repozytorium.
Należy używać tych wyspecjalizowanych ścieżek podrzędnych do testów dołączonych pluginów. Poprzedni moduł zbiorczy openclaw/plugin-sdk/testing był lokalny dla repozytorium, wykluczony z dystrybuowanych pakietów i został usunięty. Starszy alias openclaw/plugin-sdk/test-utils pozostaje lokalny dla repozytorium; pnpm run lint:plugins:no-extension-test-core-imports (scripts/check-no-extension-test-core-imports.ts) odrzuca nowe importy tego aliasu w testach rozszerzeń.

Dostępne eksporty

Zestawy testów kontraktów dołączonych pluginów używają również tych podścieżek testowych SDK jako funkcji pomocniczych rejestru, manifestu, artefaktów publicznych i testowych implementacji środowiska wykonawczego przeznaczonych wyłącznie do testów. Zestawy przeznaczone wyłącznie dla rdzenia, które zależą od spisu dołączonych składników OpenClaw, pozostają natomiast w src/plugins/contracts.

Typy

Podścieżki przeznaczone do ukierunkowanego testowania również ponownie eksportują typy przydatne w plikach testowych:

Testowanie rozpoznawania celu

Użyj installCommonResolveTargetErrorCases, aby dodać standardowe przypadki błędów rozpoznawania celu kanału:

Wzorce testowania

Testowanie kontraktów rejestracji

Testy jednostkowe, które przekazują ręcznie napisany mock api do register(api), nie sprawdzają mechanizmów akceptacji modułu ładującego OpenClaw. Dodaj co najmniej jeden test dymny korzystający z modułu ładującego dla każdej powierzchni rejestracji, od której zależy plugin, zwłaszcza hooków i wyłącznych możliwości, takich jak pamięć. Rzeczywisty moduł ładujący odrzuca rejestrację pluginu, gdy brakuje wymaganych metadanych lub plugin wywołuje API możliwości, której nie jest właścicielem. Na przykład api.registerHook(...) wymaga nazwy hooka, a api.registerMemoryCapability(...) wymaga, aby manifest pluginu lub eksportowany punkt wejścia deklarował kind: "memory".

Testowanie dostępu do konfiguracji środowiska uruchomieniowego

Preferuj współdzielony mock środowiska uruchomieniowego pluginu z openclaw/plugin-sdk/plugin-test-runtime. Jego mocki runtime.config.loadConfig() i runtime.config.writeConfigFile(...) domyślnie zgłaszają wyjątki, dzięki czemu testy wykrywają nowe użycia przestarzałych API zgodności. Zastępuj te mocki tylko wtedy, gdy test jawnie obejmuje starsze zachowanie zgodności.

Testowanie jednostkowe pluginu kanału

Testowanie jednostkowe pluginu dostawcy

Mockowanie środowiska uruchomieniowego pluginu

W przypadku kodu korzystającego z createPluginRuntimeStore zamockuj środowisko uruchomieniowe w testach:

Testowanie za pomocą atrap dla poszczególnych instancji

Preferuj atrapy dla poszczególnych instancji zamiast modyfikowania prototypu:

Testy kontraktowe (pluginy w repozytorium)

Dołączone pluginy mają testy kontraktowe weryfikujące własność rejestracji:
Te testy sprawdzają:
  • Które pluginy rejestrują poszczególnych dostawców
  • Które pluginy rejestrują poszczególnych dostawców mowy
  • Poprawność struktury rejestracji
  • Zgodność z kontraktem środowiska uruchomieniowego

Uruchamianie testów o ograniczonym zakresie

Dla określonego pluginu:
Tylko dla testów kontraktowych:

Egzekwowanie reguł lintowania (pluginy w repozytorium)

scripts/run-additional-boundary-checks.mjs uruchamia w CI zestaw kontroli granic importów lint:plugins:*; każdą z nich można również uruchomić samodzielnie lokalnie: Zewnętrzne pluginy nie podlegają tym regułom lintowania, ale zaleca się stosowanie tych samych wzorców.

Konfiguracja testów

OpenClaw używa Vitest 4 z informacyjnym raportowaniem pokrycia V8. W przypadku testów pluginów:
Jeśli lokalne uruchomienia powodują presję na pamięć:

Powiązane