@chamvi/test-kit (英语)
Chamvi的测试助手:一个可控的时钟,寄存器和工作空间合同套件,一个git固定和在流程中的假GitHub.
安装
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。 。 。 .