测试 @dcp-ai/cli¶
本文是英文版的参考译文,更新于 26/10/2026。如有出入,以英文版为准。标识符、命令和代码块保持原文,不作翻译。
已发布的 CLI 2.1.0 需要 npm 上的 @dcp-ai/sdk ^2.2.0。本仓库测试有意使用从同一检出代码构建的 SDK,以在未来发布前覆盖源码变更。
cd sdks/typescript && npm install && npm run build
cd ../../cli
npm install --no-save --package-lock=false --ignore-scripts --install-links ../sdks/typescript
npm test # both suites
npm run test:negative-control # must print "failed as required"
--install-links 会把构建好的 SDK 复制到 cli/node_modules 中而不是创建链接,其他标志则保持 package.json 和锁文件不变,并且不运行安装脚本。CI 在 .github/workflows/ci.yml 的 cli 作业中以 Node 20 和 22 做同样的事。该作业不安装仓库根目录,因此不会有任何内容通过根目录的 node_modules 解析。
测试套件¶
__tests__/verify-s-range.test.mjs:V1 验证、Ed25519 的 S 范围(RFC 8032 §5.1.7)、退出码,以及对历史 V2 格式的拒绝。__tests__/verify-v2-normative.test.mjs:使用规范验证器的 V2 bundle(跨 SDK 向量、规范之前的封装、.dcp密钥固定)、lib/schemas/v2中的 schema 副本,以及单独运行的打包文件。其子进程在固定的Date.now下运行,因此结果不依赖日期。
每个用例都在一个新的临时目录中(其上层没有 .dcp/),以子进程运行 bin/dcp-ai.js。
阴性对照¶
设置 DCP_NEGATIVE_CONTROL=1 时,每个套件会反转一个阳性用例。__tests__/negative-control.mjs 以这种方式运行两个套件。只有当运行以 1 退出、恰好这两个用例失败(各自因断言失败)、其他所有测试都通过且没有被取消或跳过时,它才会通过。任何其他结果都会使它失败,包括无法加载的套件。
参考验证器和 playground 有各自的 S 范围测试(tools/crypto-s-range.test.mjs、tools/playground-s-range.test.mjs),由 conformance 作业运行。