@chat-adapter/tests

中文文档
4.44.0发布于 2026/11/02MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 17.4万

测试Chat SDK适配器和接子的工厂、配对器和设施

中文使用文档
文档目录14 节
  1. 安装
  2. 工厂
  3. createMockAdapter(name?, overrides?)
  4. createMockState()
  5. createMockChatInstance(options?)
  6. createTestMessage(id, text, overrides?)
  7. mockLogger 编号 : createMockLogger()
  8. 匹配者
  9. 通过设置文件自动注册
  10. 人工登记
  11. 可用匹配者
  12. 观众
  13. AI 编码代理
  14. 许可证

@chat-adapters/测试

npm 软件包 : @chat-adapter/tests

Agent Stack MIT License

工厂、配对商和安装测试设施 聊天SDK 适配器和锅.

安装

pnpm add -D @chat-adapter/tests

这个软件包 chat 财务报告和审定财务报表 vitest 作为同伴的依赖性——它们应该已经在你的计划中了.

工厂

import {
  createMockAdapter,
  createMockChatInstance,
  createMockState,
  createTestMessage,
  mockLogger,
} from "@chat-adapter/tests";

createMockAdapter(name?, overrides?)

返回 a Adapter 每种方法为: vi.fn() 和明智的违约。 过 overrides 以互换单个方法:

const adapter = createMockAdapter("slack", {
  postMessage: vi.fn().mockResolvedValue({ id: "msg-7", raw: {} }),
});

createMockState()

回返a StateAdapter 由内存支持 Maps——订阅,锁定,KV,列表,并排队所有工作端到端. 包括a cache: Map<string, unknown> 直接检查.

createMockChatInstance(options?)

回返a ChatInstance 与每个 process* 处理器为 vi.fn()。用于适配器作者验证其适配器通过右钩发送来的事件.

const state = createMockState();
const chat = createMockChatInstance({ state });
await myAdapter.handleWebhook(req); // your adapter under test
expect(chat.processMessage).toHaveBeenCalledOnce();

createTestMessage(id, text, overrides?)

构建一个 Message aST已经装好了.

mockLogger 编号 : createMockLogger()

mockLogger 是一个共享的 Logger 用来进行不关心隔离的测试. createMockLogger() 返回每个调用的新代码.

匹配者

Vitest自定义匹配者覆盖了最常见的Chat SDK断言.

通过设置文件自动注册

// vitest.config.ts
import { defineConfig } from "vitest/config";

export default defineConfig({
  test: {
    setupFiles: ["@chat-adapter/tests/setup"],
  },
});

人工登记

import { matchers } from "@chat-adapter/tests/matchers";
expect.extend(matchers);

可用匹配者

匹配者辅助
expect(adapter).toHavePosted(threadId, textPattern?)adapter.postMessage 用于此线索( 和信件文本匹配) textPattern 如果给出)
expect(adapter).toHaveEdited(threadId, messageId, textPattern?)adapter.editMessage 已调用此信件( 和文本匹配 textPattern 如果给出)
expect(adapter).toHaveDeleted(threadId, messageId)adapter.deleteMessage 为了这个消息
expect(adapter).toHaveReactedWith(threadId, messageId, emoji)adapter.addReaction 与emoji(弦或 EmojiValue.name(中文(简体) )
expect(adapter).toHaveStartedTyping(threadId)adapter.startTyping 这个线程被调用
expect(adapter).toHavePostedToChannel(channelId, textPattern?)adapter.postChannelMessage 被调用到此频道
expect(chat).toHaveDispatched(handler)这个名字 process* 模拟操作器 ChatInstance 被调用
expect(state).toBeSubscribedTo(threadId)state.isSubscribed(threadId) 决定: true (同步-需求) await(中文(简体) )
expect(adapter).toHavePosted("slack:C1:t1", /hello/);
expect(adapter).toHaveEdited("slack:C1:t1", "msg-1", /updated/);
expect(adapter).toHaveDeleted("slack:C1:t1", "msg-1");
expect(adapter).toHaveReactedWith("slack:C1:t1", "msg-1", "thumbsup");
expect(adapter).toHaveStartedTyping("slack:C1:t1");
expect(adapter).toHavePostedToChannel("slack:C1");
expect(chat).toHaveDispatched("processMessage");
await expect(state).toBeSubscribedTo("slack:C1:t1");

文本版配对者(toHavePosted, (中文(简体) ), toHaveEdited, (中文(简体) ), toHavePostedToChannel)从 AdapterPostableMessage - 处理简单的弦, PostableMarkdown.markdown, (中文(简体) ), PostableRaw.raw,以及 PostableCard.fallbackText。 AST 形状信件(PostableAst和无牌 fallbackText 无法匹配文本 textPattern 检查 mock.calls 直接检查.

观众

  • 瓶装作者 - 驱动模拟事件 通过你的处理者, 坚持出门呼叫.
  • 适应作者 - 核实你 Adapter 执行路线webhoks通过右侧 ChatInstance.process* 与正确的常态有效载荷相接.

适配器专用的帮助器(例如签名的Slack webhook构建器,Teams声称的构建器)住在每个适配器的自有设备中 /testing 子路径,不是在这个包里.

AI 编码代理

如果您使用OpenAI Codex, Claude Code, 或 Cursor 等AI编码代理, 在写入代码前安装 Chat SDK 技能, 使其了解 SDK API, 适配器模式, 以及项目常规 .

npx skills add vercel/chat

技术参考文献 node_modules/chat/docs,加上已发布的软件包中的适配器指南和启动模板.

您也可以安装 Vercel 插件 包括Chat SDK技术与专家代理、代理斜线指令

npx plugins add vercel/vercel-plugin

插件是可选的;单是技能就足以用Chat SDK来构建.

关于可代理阅读的文件,见 聊天- sdk.dev/llms.txt (页数索引)或 聊天- sdk.dev/llms- full.txt (全文).

许可证

麻省理工学院

版本与发布记录

@chat-adapter/tests 共发布 19 个版本,首次发布于 2026/05/18;过去 12 个月发布了 19 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
4.44.0latest2026/11/026 天前
4.43.02026/10/1921 天前
4.42.02026/10/1425 天前
4.41.12026/09/291 个月前
4.41.02026/09/181 个月前
4.40.02026/09/052 个月前

关于 @chat-adapter/tests 的常见问题

@chat-adapter/tests 是什么?

测试Chat SDK适配器和接子的工厂、配对器和设施

如何安装 @chat-adapter/tests?

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

@chat-adapter/tests 支持 TypeScript 吗?

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

@chat-adapter/tests 支持 ESM 还是 CommonJS?

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

@chat-adapter/tests 可以商用吗?

@chat-adapter/tests 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@chat-adapter/tests 的下载量有多少?

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

@chat-adapter/tests 还在维护吗?

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