@chamvi/test-kit

中文文档
0.8.0发布于 2026/11/09Apache-2.0TypeScriptES Module零依赖构建来源已验证近 30 天下载 3083

测试chamvi的助手:可控时钟,商店和工作空间合同套房,git固定和假GitHub.

中文使用文档
文档目录9 节
  1. 安装
  2. 使用量
  3. 脚本模型
  4. 仓库合同
  5. 可控时钟
  6. 工作空间合同
  7. 假的 GitHub
  8. API 密码
  9. 许可证

@chamvi/test-kit

@chamvi/test-kit (英语)

Chamvi的测试助手:一个可控的时钟,寄存器和工作空间合同套件,一个git固定和在流程中的假GitHub.

npm version CI License


安装

npm install --save-dev @chamvi/test-kit @chamvi/core ai vitest

@chamvi/core, (中文(简体) ), ai (v7)和 vitest 是同伴的依赖关系。 工作空间合同需要任何 IWorkspace 联 合 国 @chamvi/sandbox (结构类型为 ContractWorkspace,所以工具包并不依赖于 @chamvi/sandbox) (中文(简体) ).

使用量

脚本模型

mockModel(responses) 提供一种被脚本化的AI SDK模型,用于生成和流出. 每个 MockResponse 包含文本或工具调用 parts 和可选的标志使用. textModel(text), (中文(简体) ), approvalModel(toolName, input) 财务报告和审定财务报表 failingModel() 覆盖常见测试流量.

import { textModel } from '@chamvi/test-kit';

const model = textModel('done');

仓库合同

每个 IStore 以共享的Vitest套件证明它的实施。 工厂有新鲜的 ControllableClock 每项试验,并必须在每次期满决定中使用:

import { createMemoryStore } from '@chamvi/core';
import { describeRepositoryContract } from '@chamvi/test-kit';

describeRepositoryContract((clock) => createMemoryStore({ clock }));

可控时钟

ControllableClock 执行 IClock 并且只有在接到通知后才能行动 所以没有实时计时器就测试引擎超时 债权租赁和批准到期:

import { createMemoryStore, Engine } from '@chamvi/core';
import { ControllableClock } from '@chamvi/test-kit';

const clock = new ControllableClock();
const store = createMemoryStore({ clock });
const engine = new Engine({ store, agents: [], clock });

clock.advance(60_000); // fires every timer due within the next minute, in order

工作空间合同

每个沙盒供应商都用共享的 Vitest 套件来证明自己的工作空间: argv exec and Execut code, stdin,, cwd 和路径逃逸,在洪水下64 KiB 输出封顶,进程组在超时杀死(包括一个背景外孙),中止,UTF-8文件及其大小封顶,并在执行时被处理. 它运行着真实的流程,并有短暂的实时超时,因此工厂每测试一次返回一个新鲜而无回放的工作空间(套房处理). 与 find (一个第二提供者实例,就像一个重新启动的过程)它也掉了一个工作空间的手柄并期望 find 以文件返回它 :

import { createLocalSandbox } from '@chamvi/sandbox-local';
import { describeWorkspaceContract } from '@chamvi/test-kit';

const provider = createLocalSandbox();
describeWorkspaceContract('local', (input) => provider.create({ runId: input?.runId ?? 'contract' }), {
    find: (runId) => createLocalSandbox().find(runId),
});

createGitFixture(files) 创建一个临时的 git 存储器, 包含一个任务 files 树枝 main标记 v1返回时 { path, url, commit, cleanup }· ; url 是一个 file:// 管理器的 URL allowFileRepos: true。 。 。 .

假的 GitHub

createFakeGithub({ appId, slug?, clock }) 是用于 createGithubApp({ fetch }) 从 @chamvi/github: 它生成 RSA 密钥对, 检查 App JWTs 和安装符 clock,为问题,评论,标签,拉取请求,内容和可变地图的发布服务,绝不接触网络:

import { createGithubApp } from '@chamvi/github';
import { ControllableClock, createFakeGithub } from '@chamvi/test-kit';

const clock = new ControllableClock(new Date('2026-10-21T09:00:00Z'));
const fake = createFakeGithub({ appId: '123', slug: 'my-app', clock });
const gh = createGithubApp({
    appId: '123',
    privateKey: fake.privateKey,
    webhookSecret: 'webhook-secret',
    slug: 'my-app',
    clock,
    fetch: fake.fetch,
});

fake.issues.set('octo/demo#7', { number: 7, title: 'Bug', state: 'open' });
fake.failNext('POST', '/repos/octo/demo/issues/7/comments', 502); // one injected failure

route(method, path, handler) 添加或覆盖一条路由(:name 是一个部分, *name 其余的, requests 记录每一个请求, tokenInstallations 安装每个发行的代号。 请求 signal 中止, 也当一个路由处理器待决时, 用信号的理由拒绝, 作为节点 fetch 已经.

API 密码

导出仁爱目的
ControllableClock类IClock 仅通过 advance(ms); 开始于 new Date(0) 除非给定日期
describeRepositoryContract函数虚拟套房 IStore 执行必须通过
describeWorkspaceContract函数每个沙盒供应商的Veste套房 IWorkspace 必须通过
createGitFixture函数包含一个承诺的临时 git 仓库( 分支) main标记 v1(中文(简体) )
createFakeGithub函数用于 createGithubApp({ fetch })

类型 : ContractWorkspace, (中文(简体) ), WorkspaceContractFactory, (中文(简体) ), GitFixture, (中文(简体) ), FakeGithub, (中文(简体) ), FakeGithubOptions, (中文(简体) ), FakeRequest, (中文(简体) ), FakeRouteInput, (中文(简体) ), FakeRouteResult, (中文(简体) ), FakeRouteHandler, (中文(简体) ), JwtClaims。 。 。 .

许可证

由 所制

原载 Apache 许可证 2.0。 。 。 .

版本与发布记录

@chamvi/test-kit 共发布 15 个版本,首次发布于 2026/10/25;过去 12 个月发布了 15 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.8.0latest2026/11/09今天
0.7.32026/11/063 天前
0.7.22026/11/053 天前
0.7.12026/11/054 天前
0.7.02026/11/045 天前
0.6.12026/11/045 天前

关于 @chamvi/test-kit 的常见问题

@chamvi/test-kit 是什么?

测试chamvi的助手:可控时钟,商店和工作空间合同套房,git固定和假GitHub.

如何安装 @chamvi/test-kit?

在项目目录运行 npm install @chamvi/test-kit,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:ai(^7)、vitest(^5)、@chamvi/core(^0.8.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@chamvi/test-kit 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@chamvi/test-kit 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@chamvi/test-kit 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=26.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@chamvi/test-kit 可以商用吗?

@chamvi/test-kit 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@chamvi/test-kit 的下载量有多少?

根据 npm 官方下载统计,@chamvi/test-kit 在 2026/10/10 – 2026/11/08 这 30 天内被下载 3,083 次,日均约 103 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@chamvi/test-kit 还在维护吗?

最新版本 0.8.0 发布于 2026/11/09(今天);至今共发布 15 个版本,其中过去 12 个月发布了 15 个;首次发布于 2026/10/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。