Plugin SDK reference
Plugins testen
Referentie voor testhulpmiddelen, patronen en lintafdwinging voor OpenClaw- plugins.
Testhulpmiddelen
Deze subpaden zijn broncode-ingangspunten binnen de repository voor de eigen meegeleverde
plugintests van OpenClaw. Ze worden niet gepubliceerd als package.json-exports voor
plugins van derden en kunnen Vitest of andere testafhankelijkheden importeren die alleen
binnen de repository beschikbaar zijn.
shouldAckReaction, removeAckReactionAfterReply,} from "openclaw/plugin-sdk/channel-feedback"; bundledPluginRoot, createCliRuntimeCapture, typedCases,} from "openclaw/plugin-sdk/test-fixtures"; Gebruik bij voorkeur deze gerichte subpaden voor nieuwe tests van meegeleverde plugins. De brede
openclaw/plugin-sdk/testing-barrel en de alias openclaw/plugin-sdk/test-utils
zijn uitsluitend bedoeld voor verouderde compatibiliteit: pnpm run lint:plugins:no-extension-test-core-imports
(scripts/check-no-extension-test-core-imports.ts) weigert nieuwe imports van
beide in extensietestbestanden, en beide blijven uitsluitend bestaan voor
compatibiliteitsregistratietests.
Beschikbare exports
| Export | Doel |
|---|---|
createTestPluginApi |
Bouw een minimale mock van de Plugin-API voor unittests van directe registratie. Importeer uit plugin-sdk/plugin-test-api |
AUTH_PROFILE_RUNTIME_CONTRACT |
Gedeelde contractfixture voor authenticatieprofielen voor systeemeigen agentruntime-adapters. Importeer uit plugin-sdk/agent-runtime-test-contracts |
DELIVERY_NO_REPLY_RUNTIME_CONTRACT |
Gedeelde contractfixture voor leveringsonderdrukking voor systeemeigen agentruntime-adapters. Importeer uit plugin-sdk/agent-runtime-test-contracts |
OUTCOME_FALLBACK_RUNTIME_CONTRACT |
Gedeelde contractfixture voor fallbackclassificatie voor systeemeigen agentruntime-adapters. Importeer uit plugin-sdk/agent-runtime-test-contracts |
createParameterFreeTool |
Bouw schemafixtures voor dynamische tools voor systeemeigen runtimecontracttests. Importeer uit plugin-sdk/agent-runtime-test-contracts |
expectChannelInboundContextContract |
Controleer de vorm van de inkomende kanaalcontext. Importeer uit plugin-sdk/channel-contract-testing |
installChannelOutboundPayloadContractSuite |
Installeer contracttestgevallen voor uitgaande kanaalpayloads. Importeer uit plugin-sdk/channel-contract-testing |
createStartAccountContext |
Bouw levenscycluscontexten voor kanaalaccounts. Importeer uit plugin-sdk/channel-test-helpers |
installChannelActionsContractSuite |
Installeer algemene contracttestgevallen voor kanaalberichtacties. Importeer uit plugin-sdk/channel-test-helpers |
installChannelSetupContractSuite |
Installeer algemene contracttestgevallen voor kanaalconfiguratie. Importeer uit plugin-sdk/channel-test-helpers |
installChannelStatusContractSuite |
Installeer algemene contracttestgevallen voor kanaalstatus. Importeer uit plugin-sdk/channel-test-helpers |
expectDirectoryIds |
Controleer kanaalmap-id's van een functie die een mappenlijst retourneert. Importeer uit plugin-sdk/channel-test-helpers |
assertBundledChannelEntries |
Controleer of gebundelde kanaalingangspunten het verwachte openbare contract beschikbaar stellen. Importeer uit plugin-sdk/channel-test-helpers |
formatEnvelopeTimestamp |
Formatteer deterministische enveloptijdstempels. Importeer uit plugin-sdk/channel-test-helpers |
expectPairingReplyText |
Controleer de antwoordtekst voor kanaalkoppeling en extraheer de code. Importeer uit plugin-sdk/channel-test-helpers |
describePluginRegistrationContract |
Installeer contractcontroles voor Plugin-registratie. Importeer uit plugin-sdk/plugin-test-contracts |
registerSingleProviderPlugin |
Registreer één provider-Plugin in loaderrooktests. Importeer uit plugin-sdk/plugin-test-runtime |
registerProviderPlugin |
Leg alle providertypen van één Plugin vast. Importeer uit plugin-sdk/plugin-test-runtime |
registerProviderPlugins |
Leg providerregistraties van meerdere Plugins vast. Importeer uit plugin-sdk/plugin-test-runtime |
requireRegisteredProvider |
Controleer of een providerverzameling een id bevat. Importeer uit plugin-sdk/plugin-test-runtime |
createRuntimeEnv |
Bouw een mockomgeving voor de CLI-/Plugin-runtime. Importeer uit plugin-sdk/plugin-test-runtime |
createPluginRuntimeMock |
Bouw een mock van het Plugin-runtimeoppervlak. Importeer uit plugin-sdk/plugin-test-runtime |
createPluginSetupWizardStatus |
Bouw helpers voor configuratiestatus voor kanaal-Plugins. Importeer uit plugin-sdk/plugin-test-runtime |
createTestWizardPrompter |
Bouw een mock van de prompter van de configuratiewizard. Importeer uit plugin-sdk/plugin-test-runtime |
createRuntimeTaskFlow |
Maak geïsoleerde TaskFlow-status voor de runtime. Importeer uit plugin-sdk/plugin-test-runtime |
runProviderCatalog |
Voer een providercatalogushaak uit met testafhankelijkheden. Importeer uit plugin-sdk/plugin-test-runtime |
resolveProviderWizardOptions |
Bepaal keuzes van de providerconfiguratiewizard in contracttests. Importeer uit plugin-sdk/plugin-test-runtime |
resolveProviderModelPickerEntries |
Bepaal provideritems voor de modelkiezer in contracttests. Importeer uit plugin-sdk/plugin-test-runtime |
buildProviderPluginMethodChoice |
Bouw keuze-id's voor providermethoden in de wizard voor controles. Importeer uit plugin-sdk/plugin-test-runtime |
setProviderWizardProvidersResolverForTest |
Injecteer providers voor de providerwizard voor geïsoleerde tests. Importeer uit plugin-sdk/plugin-test-runtime |
describeOpenAIProviderRuntimeContract |
Installeer runtimecontractcontroles voor providerfamilies. Importeer uit plugin-sdk/provider-test-contracts |
expectPassthroughReplayPolicy |
Controleer of het replaybeleid van providers tools en metagegevens in eigendom van de provider ongewijzigd doorgeeft. Importeer uit plugin-sdk/provider-test-contracts |
runRealtimeSttLiveTest |
Voer een live realtime-STT-providertest uit met gedeelde audiofixtures. Importeer uit plugin-sdk/provider-test-contracts |
normalizeTranscriptForMatch |
Normaliseer live transcriptuitvoer vóór benaderende controles. Importeer uit plugin-sdk/provider-test-contracts |
expectExplicitVideoGenerationCapabilities |
Controleer of videoproviders expliciete mogelijkheden voor generatiemodi declareren. Importeer uit plugin-sdk/provider-test-contracts |
expectExplicitMusicGenerationCapabilities |
Controleer of muziekproviders expliciete mogelijkheden voor genereren en bewerken declareren. Importeer uit plugin-sdk/provider-test-contracts |
mockSuccessfulDashscopeVideoTask |
Installeer een geslaagd antwoord op een DashScope-compatibele videotaak. Importeer uit plugin-sdk/provider-test-contracts |
getProviderHttpMocks |
Verkrijg toegang tot expliciet ingeschakelde Vitest-mocks voor HTTP/authenticatie van providers. Importeer uit plugin-sdk/provider-http-test-mocks |
installProviderHttpMockCleanup |
Stel mocks voor HTTP/authenticatie van providers na elke test opnieuw in. Importeer uit plugin-sdk/provider-http-test-mocks |
installCommonResolveTargetErrorCases |
Gedeelde testgevallen voor foutafhandeling bij doelbepaling. Importeer uit plugin-sdk/channel-target-testing |
shouldAckReaction |
Controleer of een kanaal een bevestigingsreactie moet toevoegen. Importeer uit plugin-sdk/channel-feedback |
removeAckReactionAfterReply |
Verwijder de bevestigingsreactie nadat het antwoord is afgeleverd. Importeer uit plugin-sdk/channel-feedback |
createTestRegistry |
Bouw een registerfixture voor kanaal-Plugins. Importeer uit plugin-sdk/plugin-test-runtime of plugin-sdk/channel-test-helpers |
createEmptyPluginRegistry |
Bouw een lege Plugin-registerfixture. Importeer uit plugin-sdk/plugin-test-runtime of plugin-sdk/channel-test-helpers |
setActivePluginRegistry |
Installeer een registerfixture voor Plugin-runtimetests. Importeer uit plugin-sdk/plugin-test-runtime of plugin-sdk/channel-test-helpers |
createRequestCaptureJsonFetch |
Leg JSON-fetchverzoeken vast in tests voor mediahelpers. Importeer uit plugin-sdk/test-env |
withServer |
Voer tests uit tegen een tijdelijke lokale HTTP-server. Importeer uit plugin-sdk/test-env |
createMockIncomingRequest |
Bouw een minimaal object voor een inkomend HTTP-verzoek. Importeer uit plugin-sdk/test-env |
withFetchPreconnect |
Voer fetchtests uit met geïnstalleerde preconnect-hooks. Importeer uit plugin-sdk/test-env |
withEnv / withEnvAsync |
Pas omgevingsvariabelen tijdelijk aan. Importeer uit plugin-sdk/test-env |
createTempHomeEnv / withTempHome / withTempDir |
Maak geïsoleerde testfixtures voor het bestandssysteem. Importeer uit plugin-sdk/test-env |
createMockServerResponse |
Maak een minimale mock van een HTTP-serverrespons. Importeer uit plugin-sdk/test-env |
createProviderUsageFetch |
Bouw fetchfixtures voor providergebruik. Importeer uit plugin-sdk/test-env |
useFrozenTime / useRealTime |
Bevries en herstel timers voor tijdgevoelige tests. Importeer uit plugin-sdk/test-env |
createCliRuntimeCapture |
Leg CLI-runtime-uitvoer vast in tests. Importeer uit plugin-sdk/test-fixtures |
importFreshModule |
Importeer een ESM-module met een nieuw querytoken om de modulecache te omzeilen. Importeer uit plugin-sdk/test-fixtures |
bundledPluginRoot / bundledPluginFile |
Bepaal fixturepaden naar de bron of distributie van gebundelde Plugins. Importeer uit plugin-sdk/test-fixtures |
mockNodeBuiltinModule |
Installeer gerichte Vitest-mocks voor ingebouwde Node-modules. Importeer uit plugin-sdk/test-node-mocks |
createSandboxTestContext |
Bouw sandboxtestcontexten. Importeer uit plugin-sdk/test-fixtures |
writeSkill |
Schrijf Skills-fixtures. Importeer uit plugin-sdk/test-fixtures |
makeAgentAssistantMessage |
Bouw fixtures voor transcriptberichten van agents. Importeer uit plugin-sdk/test-fixtures |
peekSystemEvents / resetSystemEventsForTest |
Inspecteer en reset fixtures voor systeemgebeurtenissen. Importeer uit plugin-sdk/test-fixtures |
sanitizeTerminalText |
Saniteer terminaluitvoer voor assertions. Importeer uit plugin-sdk/test-fixtures |
countLines / hasBalancedFences |
Controleer de vorm van de uitvoer van de opdeling in segmenten. Importeer uit plugin-sdk/test-fixtures |
typedCases |
Behoud letterlijke typen voor tabelgestuurde tests. Importeer uit plugin-sdk/test-fixtures |
Contracttestsuites voor gebundelde plugins gebruiken deze SDK-testsubpaden ook voor
helpers voor uitsluitend in tests gebruikte registers, manifesten, openbare artefacten en runtimefixtures.
Suites die uitsluitend voor de kern zijn en afhankelijk zijn van de gebundelde OpenClaw-inventaris, blijven in plaats daarvan onder
src/plugins/contracts.
Typen
Gerichte testsubpaden exporteren ook typen opnieuw die nuttig zijn in testbestanden:
ChannelAccountSnapshot, ChannelGatewayContext,} from "openclaw/plugin-sdk/channel-contract"; Oplossing van testdoelen
Gebruik installCommonResolveTargetErrorCases om standaardfoutgevallen toe te voegen voor
het oplossen van kanaaldoelen:
describe("my-channel target resolution", () => { installCommonResolveTargetErrorCases({ resolveTarget: ({ to, mode, allowFrom }) => { // Your channel's target resolution logic return myChannelResolveTarget({ to, mode, allowFrom }); }, implicitAllowFrom: ["user1", "user2"], }); // Add channel-specific test cases it("should resolve @username targets", () => { // ... });});Testpatronen
Registratiecontracten testen
Unittests die een handgeschreven api-mock aan register(api) doorgeven,
testen de acceptatiecontroles van de OpenClaw-lader niet. Voeg voor elk registratieoppervlak
waarvan je plugin afhankelijk is minstens één door de lader ondersteunde rooktest toe, vooral
voor hooks en exclusieve mogelijkheden zoals geheugen.
De echte lader laat pluginregistratie mislukken wanneer vereiste metadata ontbreekt of
een plugin een mogelijkheden-API aanroept waarvan deze geen eigenaar is. Zo vereist
api.registerHook(...) bijvoorbeeld een hooknaam en vereist
api.registerMemoryCapability(...) dat het pluginmanifest of het geëxporteerde
ingangspunt kind: "memory" declareert.
Toegang tot runtimeconfiguratie testen
Geef de voorkeur aan de gedeelde mock voor de pluginruntime uit openclaw/plugin-sdk/plugin-test-runtime.
De mocks runtime.config.loadConfig() en runtime.config.writeConfigFile(...)
werpen standaard een fout op, zodat tests nieuw gebruik van verouderde compatibiliteits-API's
detecteren. Overschrijf die mocks alleen wanneer de test expliciet verouderd
compatibiliteitsgedrag behandelt.
Een kanaalplugin unit-testen
describe("my-channel plugin", () => { it("should resolve account from config", () => { const cfg = { channels: { "my-channel": { token: "test-token", allowFrom: ["user1"], }, }, }; const account = myPlugin.setup.resolveAccount(cfg, undefined); expect(account.token).toBe("test-token"); }); it("should inspect account without materializing secrets", () => { const cfg = { channels: { "my-channel": { token: "test-token" }, }, }; const inspection = myPlugin.setup.inspectAccount(cfg, undefined); expect(inspection.configured).toBe(true); expect(inspection.tokenStatus).toBe("available"); // No token value exposed expect(inspection).not.toHaveProperty("token"); });});Een providerplugin unit-testen
describe("my-provider plugin", () => { it("should resolve dynamic models", () => { const model = myProvider.resolveDynamicModel({ modelId: "custom-model-v2", // ... context }); expect(model.id).toBe("custom-model-v2"); expect(model.provider).toBe("my-provider"); expect(model.api).toBe("openai-completions"); }); it("should return catalog when API key is available", async () => { const result = await myProvider.catalog.run({ resolveProviderApiKey: () => ({ apiKey: "test-key" }), // ... context }); expect(result?.provider?.models).toHaveLength(2); });});De pluginruntime mocken
Mock voor code die createPluginRuntimeStore gebruikt de runtime in tests:
const store = createPluginRuntimeStore<PluginRuntime>({ pluginId: "test-plugin", errorMessage: "test runtime not set",}); // In test setupconst mockRuntime = { agent: { resolveAgentDir: vi.fn().mockReturnValue("/tmp/agent"), // ... other mocks }, config: { current: vi.fn(() => ({}) as const), mutateConfigFile: vi.fn(), replaceConfigFile: vi.fn(), }, // ... other namespaces} as unknown as PluginRuntime; store.setRuntime(mockRuntime); // After testsstore.clearRuntime();Testen met stubs per instantie
Geef de voorkeur aan stubs per instantie boven prototypemutatie:
// Preferred: per-instance stubconst client = new MyChannelClient();client.sendMessage = vi.fn().mockResolvedValue({ id: "msg-1" }); // Avoid: prototype mutation// MyChannelClient.prototype.sendMessage = vi.fn();Contracttests (plugins in de repository)
Gebundelde plugins hebben contracttests die het eigenaarschap van registraties verifiëren:
pnpm test src/plugins/contracts/Deze tests controleren:
- Welke plugins welke providers registreren
- Welke plugins welke spraakproviders registreren
- De correctheid van de registratiestructuur
- Naleving van het runtimecontract
Afgebakende tests uitvoeren
Voor een specifieke plugin:
pnpm test <bundled-plugin-root>/my-channel/Alleen voor contracttests:
pnpm test src/plugins/contracts/shape.contract.test.tspnpm test src/plugins/contracts/auth-choice.contract.test.tspnpm test src/plugins/contracts/runtime-seams.contract.test.tsLintafdwinging (plugins in de repository)
scripts/run-additional-boundary-checks.mjs voert in CI een reeks lint:plugins:*-controles
voor importgrenzen uit; elke controle kan lokaal ook afzonderlijk worden uitgevoerd:
| Opdracht | Dwingt af |
|---|---|
pnpm run lint:plugins:no-monolithic-plugin-sdk-entry-imports |
Gebundelde plugins mogen het monolithische root-barrel openclaw/plugin-sdk niet importeren. |
pnpm run lint:plugins:no-extension-src-imports |
Productie-extensiebestanden mogen de src/**-structuur van de repository niet rechtstreeks importeren (../../src/...). |
pnpm run lint:plugins:no-extension-test-core-imports |
Extensietestbestanden mogen openclaw/plugin-sdk/testing, plugin-sdk/test-utils of andere testhelpers die uitsluitend voor de kern zijn niet importeren. |
Externe plugins vallen niet onder deze lintregels, maar het wordt aanbevolen dezelfde patronen te volgen.
Testconfiguratie
OpenClaw gebruikt Vitest 4 met informatieve V8-dekkingsrapportage. Voor plugintests:
# Run all testspnpm test # Run specific plugin testspnpm test <bundled-plugin-root>/my-channel/src/channel.test.ts # Run with a specific test name filterpnpm test <bundled-plugin-root>/my-channel/ -t "resolves account" # Run with coveragepnpm test:coverageAls lokale uitvoeringen geheugendruk veroorzaken:
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm testGerelateerd
- SDK-overzicht -- importconventies
- SDK-kanaalplugins -- interface voor kanaalplugins
- SDK-providerplugins -- hooks voor providerplugins
- Plugins bouwen -- introductiehandleiding