Plugin SDK reference

Plugin परीक्षण

OpenClaw Plugins के लिए परीक्षण उपयोगिताओं, पैटर्न और लिंट प्रवर्तन का संदर्भ।

परीक्षण उपयोगिताएँ

ये उपपथ OpenClaw के अपने बंडल किए गए Plugin परीक्षणों के लिए रिपॉज़िटरी-स्थानीय स्रोत एंट्रीपॉइंट हैं। इन्हें तृतीय-पक्ष Plugins के लिए package.json एक्सपोर्ट के रूप में प्रकाशित नहीं किया जाता, और ये Vitest या केवल रिपॉज़िटरी में उपलब्ध अन्य परीक्षण निर्भरताएँ इंपोर्ट कर सकते हैं।

typescript
   shouldAckReaction,  removeAckReactionAfterReply,} from "openclaw/plugin-sdk/channel-feedback";               bundledPluginRoot,  createCliRuntimeCapture,  typedCases,} from "openclaw/plugin-sdk/test-fixtures"; 

बंडल किए गए Plugin परीक्षणों के लिए इन केंद्रित उपपथों का उपयोग करें। पूर्व 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) एक्सटेंशन परीक्षणों को ऊपर दिए गए केंद्रित परीक्षण उपपथों पर बनाए रखता है।

उपलब्ध एक्सपोर्ट

निर्यात उद्देश्य
createTestPluginApi प्रत्यक्ष पंजीकरण यूनिट परीक्षणों के लिए न्यूनतम Plugin API मॉक बनाएँ। plugin-sdk/plugin-test-api से आयात करें
AUTH_PROFILE_RUNTIME_CONTRACT नेटिव एजेंट रनटाइम अडैप्टरों के लिए साझा प्रमाणीकरण-प्रोफ़ाइल अनुबंध फ़िक्स्चर। plugin-sdk/agent-runtime-test-contracts से आयात करें
DELIVERY_NO_REPLY_RUNTIME_CONTRACT नेटिव एजेंट रनटाइम अडैप्टरों के लिए साझा डिलीवरी-दमन अनुबंध फ़िक्स्चर। plugin-sdk/agent-runtime-test-contracts से आयात करें
OUTCOME_FALLBACK_RUNTIME_CONTRACT नेटिव एजेंट रनटाइम अडैप्टरों के लिए साझा फ़ॉलबैक-वर्गीकरण अनुबंध फ़िक्स्चर। plugin-sdk/agent-runtime-test-contracts से आयात करें
createParameterFreeTool नेटिव रनटाइम अनुबंध परीक्षणों के लिए डायनेमिक-टूल स्कीमा फ़िक्स्चर बनाएँ। plugin-sdk/agent-runtime-test-contracts से आयात करें
expectChannelInboundContextContract चैनल के इनबाउंड संदर्भ का आकार अभिपुष्ट करें। plugin-sdk/channel-contract-testing से आयात करें
installChannelOutboundPayloadContractSuite चैनल के आउटबाउंड पेलोड अनुबंध मामले इंस्टॉल करें। plugin-sdk/channel-contract-testing से आयात करें
createStartAccountContext चैनल खाते के जीवनचक्र संदर्भ बनाएँ। plugin-sdk/channel-test-helpers से आयात करें
installChannelActionsContractSuite सामान्य चैनल संदेश-क्रिया अनुबंध मामले इंस्टॉल करें। plugin-sdk/channel-test-helpers से आयात करें
installChannelSetupContractSuite सामान्य चैनल सेटअप अनुबंध मामले इंस्टॉल करें। plugin-sdk/channel-test-helpers से आयात करें
installChannelStatusContractSuite सामान्य चैनल स्थिति अनुबंध मामले इंस्टॉल करें। plugin-sdk/channel-test-helpers से आयात करें
expectDirectoryIds डायरेक्टरी-सूची फ़ंक्शन से चैनल डायरेक्टरी आईडी अभिपुष्ट करें। plugin-sdk/channel-test-helpers से आयात करें
assertBundledChannelEntries अभिपुष्ट करें कि बंडल किए गए चैनल एंट्रीपॉइंट अपेक्षित सार्वजनिक अनुबंध उपलब्ध कराते हैं। plugin-sdk/channel-test-helpers से आयात करें
formatEnvelopeTimestamp नियतात्मक एनवलप टाइमस्टैम्प स्वरूपित करें। plugin-sdk/channel-test-helpers से आयात करें
expectPairingReplyText चैनल पेयरिंग उत्तर का टेक्स्ट अभिपुष्ट करें और उसका कोड निकालें। plugin-sdk/channel-test-helpers से आयात करें
describePluginRegistrationContract Plugin पंजीकरण अनुबंध जाँचें इंस्टॉल करें। plugin-sdk/plugin-test-contracts से आयात करें
registerSingleProviderPlugin लोडर स्मोक परीक्षणों में एक प्रोवाइडर Plugin पंजीकृत करें। plugin-sdk/plugin-test-runtime से आयात करें
registerProviderPlugin एक Plugin से सभी प्रोवाइडर प्रकार कैप्चर करें। plugin-sdk/plugin-test-runtime से आयात करें
registerProviderPlugins अनेक Plugins में प्रोवाइडर पंजीकरण कैप्चर करें। plugin-sdk/plugin-test-runtime से आयात करें
requireRegisteredProvider अभिपुष्ट करें कि प्रोवाइडर संग्रह में कोई आईडी मौजूद है। plugin-sdk/plugin-test-runtime से आयात करें
createRuntimeEnv मॉक किया गया CLI/Plugin रनटाइम परिवेश बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें
createPluginRuntimeMock मॉक किया गया Plugin रनटाइम सरफ़ेस बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें
createPluginSetupWizardStatus चैनल Plugins के लिए सेटअप स्थिति हेल्पर बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें
createTestWizardPrompter मॉक किया गया सेटअप विज़ार्ड प्रॉम्प्टर बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें
createRuntimeTaskFlow पृथक रनटाइम टास्क-फ़्लो स्थिति बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें
runProviderCatalog परीक्षण निर्भरताओं के साथ प्रोवाइडर कैटलॉग हुक निष्पादित करें। plugin-sdk/plugin-test-runtime से आयात करें
resolveProviderWizardOptions अनुबंध परीक्षणों में प्रोवाइडर सेटअप विज़ार्ड विकल्पों का समाधान करें। plugin-sdk/plugin-test-runtime से आयात करें
resolveProviderModelPickerEntries अनुबंध परीक्षणों में प्रोवाइडर मॉडल-पिकर प्रविष्टियों का समाधान करें। plugin-sdk/plugin-test-runtime से आयात करें
buildProviderPluginMethodChoice अभिपुष्टियों के लिए प्रोवाइडर विज़ार्ड विकल्प आईडी बनाएँ। plugin-sdk/plugin-test-runtime से आयात करें
setProviderWizardProvidersResolverForTest पृथक परीक्षणों के लिए प्रोवाइडर विज़ार्ड प्रोवाइडर इंजेक्ट करें। plugin-sdk/plugin-test-runtime से आयात करें
describeOpenAIProviderRuntimeContract प्रोवाइडर-फ़ैमिली रनटाइम अनुबंध जाँचें इंस्टॉल करें। plugin-sdk/provider-test-contracts से आयात करें
expectPassthroughReplayPolicy अभिपुष्ट करें कि प्रोवाइडर रीप्ले नीतियाँ प्रोवाइडर-स्वामित्व वाले टूल और मेटाडेटा से होकर अपरिवर्तित रूप से गुज़रती हैं। plugin-sdk/provider-test-contracts से आयात करें
runRealtimeSttLiveTest साझा ऑडियो फ़िक्स्चर के साथ लाइव रीयलटाइम STT प्रोवाइडर परीक्षण चलाएँ। plugin-sdk/provider-test-contracts से आयात करें
normalizeTranscriptForMatch फ़ज़ी अभिपुष्टियों से पहले लाइव ट्रांसक्रिप्ट आउटपुट सामान्यीकृत करें। plugin-sdk/provider-test-contracts से आयात करें
expectExplicitVideoGenerationCapabilities अभिपुष्ट करें कि वीडियो प्रोवाइडर स्पष्ट जनरेशन मोड क्षमताएँ घोषित करते हैं। plugin-sdk/provider-test-contracts से आयात करें
expectExplicitMusicGenerationCapabilities अभिपुष्ट करें कि संगीत प्रोवाइडर स्पष्ट जनरेशन/संपादन क्षमताएँ घोषित करते हैं। plugin-sdk/provider-test-contracts से आयात करें
mockSuccessfulDashscopeVideoTask सफल DashScope-संगत वीडियो टास्क प्रतिक्रिया इंस्टॉल करें। plugin-sdk/provider-test-contracts से आयात करें
getProviderHttpMocks ऑप्ट-इन प्रोवाइडर HTTP/प्रमाणीकरण Vitest मॉक एक्सेस करें। plugin-sdk/provider-http-test-mocks से आयात करें
installProviderHttpMockCleanup प्रत्येक परीक्षण के बाद प्रोवाइडर HTTP/प्रमाणीकरण मॉक रीसेट करें। plugin-sdk/provider-http-test-mocks से आयात करें
installCommonResolveTargetErrorCases लक्ष्य समाधान त्रुटि प्रबंधन के लिए साझा परीक्षण मामले। plugin-sdk/channel-target-testing से आयात करें
shouldAckReaction जाँचें कि किसी चैनल को अभिस्वीकृति प्रतिक्रिया जोड़नी चाहिए या नहीं। plugin-sdk/channel-feedback से आयात करें
removeAckReactionAfterReply उत्तर की डिलीवरी के बाद अभिस्वीकृति प्रतिक्रिया हटाएँ। plugin-sdk/channel-feedback से आयात करें
createTestRegistry चैनल Plugin रजिस्ट्री फ़िक्स्चर बनाएँ। plugin-sdk/plugin-test-runtime या plugin-sdk/channel-test-helpers से आयात करें
createEmptyPluginRegistry खाली Plugin रजिस्ट्री फ़िक्स्चर बनाएँ। plugin-sdk/plugin-test-runtime या plugin-sdk/channel-test-helpers से आयात करें
setActivePluginRegistry Plugin रनटाइम परीक्षणों के लिए रजिस्ट्री फ़िक्स्चर इंस्टॉल करें। plugin-sdk/plugin-test-runtime या plugin-sdk/channel-test-helpers से आयात करें
createRequestCaptureJsonFetch मीडिया हेल्पर परीक्षणों में JSON फ़ेच अनुरोध कैप्चर करें। plugin-sdk/test-media-understanding से आयात करें
isLiveTestEnabled ऑप्ट-इन लाइव प्रोवाइडर परीक्षणों को गेट करें। plugin-sdk/test-live से आयात करें
collectProviderApiKeys लाइव प्रोवाइडर परीक्षणों के लिए क्रेडेंशियल खोजें। plugin-sdk/test-live-auth से आयात करें
parseProviderModelMap संगीत/वीडियो लाइव-परीक्षण मॉडल ओवरराइड पार्स करें। plugin-sdk/test-media-generation से आयात करें
withServer उपयोग के बाद हटाए जा सकने वाले स्थानीय HTTP सर्वर के विरुद्ध परीक्षण चलाएँ। plugin-sdk/test-env से आयात करें
createMockIncomingRequest न्यूनतम इनकमिंग HTTP अनुरोध ऑब्जेक्ट बनाएँ। plugin-sdk/test-env से आयात करें
withFetchPreconnect प्रीकनेक्ट हुक इंस्टॉल करके फ़ेच परीक्षण चलाएँ। plugin-sdk/test-env से आयात करें
withEnv / withEnvAsync परिवेश चर अस्थायी रूप से पैच करें। plugin-sdk/test-env से आयात करें
createTempHomeEnv / withTempHome / withTempDir पृथक फ़ाइल-सिस्टम परीक्षण फ़िक्स्चर बनाएँ। plugin-sdk/test-env से आयात करें
createMockServerResponse न्यूनतम HTTP सर्वर प्रतिक्रिया मॉक बनाएँ। plugin-sdk/test-env से आयात करें
createProviderUsageFetch प्रोवाइडर उपयोग फ़ेच फ़िक्स्चर बनाएँ। plugin-sdk/test-env से आयात करें
useFrozenTime / useRealTime समय-संवेदी परीक्षणों के लिए टाइमर फ़्रीज़ और पुनर्स्थापित करें। plugin-sdk/test-env से आयात करें
createCliRuntimeCapture परीक्षणों में CLI रनटाइम आउटपुट कैप्चर करें। plugin-sdk/test-fixtures से आयात करें
importFreshModule मॉड्यूल कैश को बायपास करने के लिए नए क्वेरी टोकन के साथ ESM मॉड्यूल आयात करें। plugin-sdk/test-fixtures से आयात करें
bundledPluginRoot / bundledPluginFile बंडल किए गए Plugin स्रोत या डिस्ट फ़िक्स्चर पथों का समाधान करें। plugin-sdk/test-fixtures से आयात करें
mockNodeBuiltinModule सीमित Node बिल्ट-इन Vitest मॉक इंस्टॉल करें। plugin-sdk/test-node-mocks से आयात करें
createSandboxTestContext सैंडबॉक्स परीक्षण संदर्भ बनाएँ। plugin-sdk/test-fixtures से आयात करें
writeSkill स्किल फ़िक्स्चर लिखें। plugin-sdk/test-fixtures से आयात करें
makeAgentAssistantMessage एजेंट ट्रांसक्रिप्ट संदेश फ़िक्स्चर बनाएँ। plugin-sdk/test-fixtures से आयात करें
peekSystemEvents / resetSystemEventsForTest सिस्टम इवेंट फ़िक्स्चर का निरीक्षण करें और उन्हें रीसेट करें। plugin-sdk/test-fixtures से आयात करें
sanitizeTerminalText अभिपुष्टियों के लिए टर्मिनल आउटपुट स्वच्छ करें। plugin-sdk/test-fixtures से आयात करें
countLines / hasBalancedFences चंकिंग आउटपुट के आकार की पुष्टि करें। plugin-sdk/test-fixtures से इम्पोर्ट करें
typedCases तालिका-संचालित परीक्षणों के लिए लिटरल प्रकारों को सुरक्षित रखें। plugin-sdk/test-fixtures से इम्पोर्ट करें

बंडल किए गए Plugin की कॉन्ट्रैक्ट सुइट केवल परीक्षण वाली रजिस्ट्री, मैनिफ़ेस्ट, सार्वजनिक आर्टिफ़ैक्ट और रनटाइम फ़िक्सचर सहायिकाओं के लिए भी इन SDK परीक्षण उपपथों का उपयोग करती हैं। बंडल की गई OpenClaw इन्वेंट्री पर निर्भर केवल-कोर सुइट इसके बजाय src/plugins/contracts के अंतर्गत रहती हैं।

प्रकार

केंद्रित परीक्षण उपपथ परीक्षण फ़ाइलों में उपयोगी प्रकारों को भी फिर से निर्यात करते हैं:

typescript
   ChannelAccountSnapshot,  ChannelGatewayContext,} from "openclaw/plugin-sdk/channel-contract";  

परीक्षण लक्ष्य समाधान

चैनल लक्ष्य समाधान के लिए मानक त्रुटि मामले जोड़ने हेतु installCommonResolveTargetErrorCases का उपयोग करें:

typescript
  describe("मेरे-चैनल का लक्ष्य समाधान", () => {  installCommonResolveTargetErrorCases({    resolveTarget: ({ to, mode, allowFrom }) => {      // आपके चैनल का लक्ष्य समाधान तर्क      return myChannelResolveTarget({ to, mode, allowFrom });    },    implicitAllowFrom: ["user1", "user2"],  });   // चैनल-विशिष्ट परीक्षण मामले जोड़ें  it("@username लक्ष्यों का समाधान करना चाहिए", () => {    // ...  });});

परीक्षण प्रतिरूप

पंजीकरण कॉन्ट्रैक्ट का परीक्षण

register(api) को हाथ से लिखा हुआ api मॉक देने वाले यूनिट परीक्षण OpenClaw के लोडर स्वीकृति गेट का परीक्षण नहीं करते। आपका Plugin जिस प्रत्येक पंजीकरण सतह पर निर्भर है, उसके लिए कम-से-कम एक लोडर-समर्थित स्मोक परीक्षण जोड़ें, विशेष रूप से हुक और मेमोरी जैसी विशिष्ट क्षमताओं के लिए।

आवश्यक मेटाडेटा अनुपस्थित होने या किसी Plugin द्वारा ऐसी क्षमता API को कॉल करने पर, जिसका वह स्वामी नहीं है, वास्तविक लोडर Plugin पंजीकरण को विफल कर देता है। उदाहरण के लिए, api.registerHook(...) के लिए हुक नाम आवश्यक है और api.registerMemoryCapability(...) के लिए Plugin मैनिफ़ेस्ट या निर्यातित प्रविष्टि में kind: "memory" घोषित होना आवश्यक है।

रनटाइम कॉन्फ़िगरेशन पहुँच का परीक्षण

openclaw/plugin-sdk/plugin-test-runtime से साझा Plugin रनटाइम मॉक को प्राथमिकता दें। इसकी रनटाइम कॉन्फ़िगरेशन सहायिकाएँ वर्तमान स्नैपशॉट और म्यूटेशन API का प्रतिरूपण करती हैं।

किसी चैनल Plugin का यूनिट परीक्षण

typescript
 describe("मेरा-चैनल Plugin", () => {  it("कॉन्फ़िगरेशन से अकाउंट का समाधान करना चाहिए", () => {    const cfg = {      channels: {        "my-channel": {          token: "test-token",          allowFrom: ["user1"],        },      },    };     const account = myPlugin.setup.resolveAccount(cfg, undefined);    expect(account.token).toBe("test-token");  });   it("सीक्रेट को मूर्त रूप दिए बिना अकाउंट का निरीक्षण करना चाहिए", () => {    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");    // कोई टोकन मान उजागर नहीं किया गया    expect(inspection).not.toHaveProperty("token");  });});

किसी प्रदाता Plugin का यूनिट परीक्षण

typescript
 describe("मेरा-प्रदाता Plugin", () => {  it("डायनेमिक मॉडल का समाधान करना चाहिए", () => {    const model = myProvider.resolveDynamicModel({      modelId: "custom-model-v2",      // ... संदर्भ    });     expect(model.id).toBe("custom-model-v2");    expect(model.provider).toBe("my-provider");    expect(model.api).toBe("openai-completions");  });   it("API कुंजी उपलब्ध होने पर कैटलॉग लौटाना चाहिए", async () => {    const result = await myProvider.catalog.run({      resolveProviderApiKey: () => ({ apiKey: "test-key" }),      // ... संदर्भ    });     expect(result?.provider?.models).toHaveLength(2);  });});

Plugin रनटाइम को मॉक करना

createPluginRuntimeStore का उपयोग करने वाले कोड के लिए परीक्षणों में रनटाइम को मॉक करें:

typescript
  const store = createPluginRuntimeStore<PluginRuntime>({  pluginId: "test-plugin",  errorMessage: "परीक्षण रनटाइम सेट नहीं है",}); // परीक्षण सेटअप मेंconst mockRuntime = {  agent: {    resolveAgentDir: vi.fn().mockReturnValue("/tmp/agent"),    // ... अन्य मॉक  },  config: {    current: vi.fn(() => ({}) as const),    mutateConfigFile: vi.fn(),    replaceConfigFile: vi.fn(),  },  // ... अन्य नेमस्पेस} as unknown as PluginRuntime; store.setRuntime(mockRuntime); // परीक्षणों के बादstore.clearRuntime();

प्रति-इंस्टेंस स्टब के साथ परीक्षण

प्रोटोटाइप म्यूटेशन के बजाय प्रति-इंस्टेंस स्टब को प्राथमिकता दें:

typescript
// अनुशंसित: प्रति-इंस्टेंस स्टबconst client = new MyChannelClient();client.sendMessage = vi.fn().mockResolvedValue({ id: "msg-1" }); // इससे बचें: प्रोटोटाइप म्यूटेशन// MyChannelClient.prototype.sendMessage = vi.fn();

कॉन्ट्रैक्ट परीक्षण (रेपो के भीतर के Plugin)

बंडल किए गए Plugin में कॉन्ट्रैक्ट परीक्षण होते हैं, जो पंजीकरण स्वामित्व सत्यापित करते हैं:

bash
pnpm test src/plugins/contracts/

ये परीक्षण इसकी पुष्टि करते हैं:

  • कौन-से Plugin कौन-से प्रदाता पंजीकृत करते हैं
  • कौन-से Plugin कौन-से वाक् प्रदाता पंजीकृत करते हैं
  • पंजीकरण आकृति की शुद्धता
  • रनटाइम कॉन्ट्रैक्ट का अनुपालन

सीमित-दायरे वाले परीक्षण चलाना

किसी विशिष्ट Plugin के लिए:

bash
pnpm test <bundled-plugin-root>/my-channel/

केवल कॉन्ट्रैक्ट परीक्षणों के लिए:

bash
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.ts

लिंट प्रवर्तन (रेपो के भीतर के Plugin)

scripts/run-additional-boundary-checks.mjs CI में lint:plugins:* इंपोर्ट-सीमा जाँचों का एक समूह चलाता है; प्रत्येक को स्थानीय रूप से स्वतंत्र भी चलाया जा सकता है:

कमांड लागू करता है
pnpm run lint:plugins:no-monolithic-plugin-sdk-entry-imports बंडल किए गए Plugin मोनोलिथिक openclaw/plugin-sdk रूट बैरल को इंपोर्ट नहीं कर सकते।
pnpm run lint:plugins:no-extension-src-imports प्रोडक्शन एक्सटेंशन फ़ाइलें रेपो के src/** ट्री को सीधे इंपोर्ट नहीं कर सकतीं (../../src/...)।
pnpm run lint:plugins:no-extension-test-core-imports एक्सटेंशन परीक्षण फ़ाइलें हटाए गए SDK परीक्षण उपनाम या अन्य केवल-कोर परीक्षण सहायिकाएँ इंपोर्ट नहीं कर सकतीं।

बाहरी Plugin पर ये लिंट नियम लागू नहीं होते, लेकिन उन्हीं प्रतिरूपों का पालन करने की अनुशंसा की जाती है।

परीक्षण कॉन्फ़िगरेशन

OpenClaw सूचनात्मक V8 कवरेज रिपोर्टिंग के साथ Vitest 4 का उपयोग करता है। Plugin परीक्षणों के लिए:

bash
# सभी परीक्षण चलाएँpnpm test # विशिष्ट Plugin परीक्षण चलाएँpnpm test <bundled-plugin-root>/my-channel/src/channel.test.ts # किसी विशिष्ट परीक्षण नाम फ़िल्टर के साथ चलाएँpnpm test <bundled-plugin-root>/my-channel/ -t "अकाउंट का समाधान करता है" # कवरेज के साथ चलाएँpnpm test:coverage

यदि स्थानीय रन से मेमोरी पर दबाव पड़ता है:

bash
OPENCLAW_VITEST_MAX_WORKERS=1 pnpm test

संबंधित

Was this useful?
On this page

On this page