Skip to main content
OpenClaw 插件的测试工具、模式和 lint 强制执行参考。
在寻找测试示例? 操作指南包含完整的测试示例: 渠道插件测试提供商插件测试

测试工具

这些子路径是 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 模拟对象传给 register(api) 的单元测试不会 覆盖 OpenClaw 的加载器接受门槛。插件依赖的每个注册表面都应至少添加一个由加载器驱动的 冒烟测试,尤其是钩子以及记忆等独占能力。 当缺少必要元数据,或插件调用了不归其所有的能力 API 时,真实加载器会使插件注册失败。例如, api.registerHook(...) 需要钩子名称,而 api.registerMemoryCapability(...) 要求插件清单或导出的 入口声明 kind: "memory"

测试运行时配置访问

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

对渠道插件进行单元测试

对提供商插件进行单元测试

模拟插件运行时

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

使用每实例存根进行测试

优先使用每实例存根,而不是修改原型:

契约测试(仓库内插件)

内置插件包含用于验证注册所有权的契约测试:
这些测试会断言:
  • 哪些插件注册了哪些提供商
  • 哪些插件注册了哪些语音提供商
  • 注册结构的正确性
  • 运行时契约合规性

运行限定范围的测试

对于特定插件:
仅运行契约测试:

Lint 强制检查(仓库内插件)

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

测试配置

OpenClaw 使用 Vitest 4,并提供信息用途的 V8 覆盖率报告。对于插件测试:
如果本地运行造成内存压力:

相关内容