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-importsscripts/check-no-extension-test-core-imports.ts)会确保扩展测试使用上面的 专用测试子路径。

可用导出项

自带插件合同测试套件也会使用这些 SDK 测试子路径来获取仅供测试使用的注册表、清单、公共产物和运行时夹具辅助工具。 依赖自带 OpenClaw 库存的核心专用套件则仍放在 src/plugins/contracts 下。

测试目标解析

使用 installCommonResolveTargetErrorCases 为频道目标解析添加标准错误案例:

测试模式

测试注册契约

将手写 api mock 传递给 register(api) 的单元测试,不会 触发 OpenClaw 加载器的接受门槛。对于插件所依赖的每个注册入口, 至少添加一个基于加载器的冒烟测试,尤其是 hooks 以及诸如内存之类的独占能力。 真实加载器会在缺少必需元数据,或者插件调用了它不拥有的能力 API 时, 拒绝插件注册。例如,api.registerHook(...) 需要提供 hook 名称, 而 api.registerMemoryCapability(...) 则要求插件清单或导出的入口声明 kind: "memory"

测试运行时配置访问

优先使用来自 openclaw/plugin-sdk/plugin-test-runtime 的共享插件运行时 mock。其运行时配置辅助函数模拟当前的快照和变更 API。

频道插件的单元测试

提供者插件的单元测试

模拟插件运行时

对于使用 createPluginRuntimeStore 的代码,请在测试中 mock 运行时:

使用按实例 stub 进行测试

优先使用按实例 stub,而不是修改原型:

合同测试(仓库内插件)

捆绑的内置插件包含合同测试,用于验证注册归属:
这些测试会断言:
  • 哪些插件注册了哪些提供者
  • 哪些插件注册了哪些语音提供者
  • 注册结构是否正确
  • 运行时契约是否满足要求

为特定范围运行测试

对于特定插件:
仅运行合同测试:

Lint 强制规则(仓库内插件)

scripts/run-additional-boundary-checks.mts 会在 CI 中运行一组 lint:plugins:* 导入边界检查;每项检查也可以在本地单独运行: 外部插件不受这些 lint 规则约束,但仍建议遵循相同模式。

测试配置

OpenClaw 使用带有信息性 V8 覆盖率报告的 Vitest 4。对于插件测试:
如果本地运行导致内存压力:

相关内容