# @chamvi/test-kit 中文文档

规范地址：https://npmcn.com/package/%40chamvi/test-kit/

版本：0\.8\.0
npm 元数据更新时间：2026-11-08T20:18:46.639Z
中文译文更新时间：2026-11-09T10:19:23.109Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40chamvi/test-kit
原文对照：https://npmcn.com/package/%40chamvi/test-kit/?lang=original
项目主页：https://chamvi.dev/
源码仓库：https://github.com/chamvi/chamvi

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：599 kB，7 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=26\.0\.0
- 运行依赖：0 个
- peer 依赖：ai ^7，vitest ^5，@chamvi/core ^0\.8\.0
- 首次发布：2026-10-25T08:42:22.470Z
- 最新版本发布：2026-11-08T20:18:46.277Z
- 近 30 天下载量：3083（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：15（近 12 个月 15 个）

## 中文简介

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

## 安装

```sh
npm install @chamvi/test-kit
```

也可以使用：`pnpm add @chamvi/test-kit`、`yarn add @chamvi/test-kit`、`bun add @chamvi/test-kit`

## README

![@chamvi/test-kit](https://raw.githubusercontent.com/chamvi/chamvi/master/.github/assets/logo-test-kit.svg)

# @chamvi/test-kit (英语)

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

[![npm version](https://img.shields.io/npm/v/@chamvi/test-kit)](https://www.npmjs.com/package/@chamvi/test-kit) [![CI](https://github.com/chamvi/chamvi/actions/workflows/ci.yml/badge.svg)](https://github.com/chamvi/chamvi/actions/workflows/ci.yml) [![License](https://img.shields.io/npm/l/@chamvi/test-kit)](https://github.com/chamvi/chamvi/blob/master/packages/test-kit/LICENSE)

* * *

## 安装

```bash
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()` 覆盖常见测试流量.

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

const model = textModel('done');
```

### 仓库合同

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

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

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

### 可控时钟

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

```typescript
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` 以文件返回它 :

```ts
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`,为问题,评论,标签,拉取请求,内容和可变地图的发布服务,绝不接触网络:

```ts
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](https://npmcn.com/package/%40chamvi/test-kit/LICENSE)。 。 。 .

## 常见问题

### @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 和提交记录判断。

