@ frontmcp/ 测试
FrontMCP服务器的端到端测试. 它启动您的服务器, 每个测试 mcp,一个连接到它的 MCP 客户端,并添加匹配者喜欢 toBeSuccessful() 财务报告和审定财务报表 toContainTool() 改为 expect. 在 Jest 下进行的测试 frontmcp test 或你自己的杰斯特配置。 它还有制作自己测试的部件:JSON Web Token(JWT)工厂,模拟OAuth和API服务器,HTTP模拟和请求截取器.
安装
npm install -D @frontmcp/testing jest tsx
要求节点js 24或以后,以及 @frontmcp/sdk 在项目中(对等依赖,如: @frontmcp/lazy-zod和SDK一起来的. jest (29或30)进行测试 @jest/globals随它而来,提供 expect;两者都是可选的同龄人,这样使活物厂和模拟服务器在杰斯特之外工作. 库启动您的服务器 tsx。 。 。 . @swc/jest,它汇编测试结果,与软件包一起安装.
使用量
// e2e/tickets.e2e.spec.ts
import { expect, test } from '@frontmcp/testing';
test.use({ server: './src/main.ts' });
test('server exposes tools', async ({ mcp }) => {
const tools = await mcp.tools.list();
expect(tools).toContainTool('search_tickets');
});
test('tool execution works', async ({ mcp }) => {
const result = await mcp.tools.call('search_tickets', { query: 'log' });
expect(result).toBeSuccessful();
expect(result.json()).toEqual({ tickets: [{ id: 'T-1', title: 'Cannot log in' }] });
});
npx frontmcp test
frontmcp test (从 frontmcp CLI)运行 src/**/*.spec.ts, (中文(简体) ), __tests__/**/*.spec.ts 财务报告和审定财务报表 e2e/**/*.e2e.spec.ts 带有它生成的Jest配置. 与一个 jest.config.* 从一个开始 游戏预设。服务器从需要运行的第一个测试开始,并使用相同的测试 test.use() 选项共享.
游戏预设
| 预设 | 用它来 |
|---|---|
preset: '@frontmcp/testing' | 配置 frontmcp test 生成: 单位和 e2e 规格, 60秒超时, 和通过 @frontmcp/testing/setup |
preset: '@frontmcp/testing/jest-preset-unit' | 单位测试, 在 CommonJS 项目中: Jest 默认的5秒超时, 没有设置文件, 以及每个 *.spec.ts(x) 除外 *.e2e.spec, (中文(简体) ), *.perf.spec 财务报告和审定财务报表 *.pw.spec 文档。 添加 @frontmcp/testing/setup 改为 setupFilesAfterEnv 要使用匹配器 |
将 TypeScript 和 TSX 编译为 @swc/jest,同时编译 jose, (中文(简体) ), @noble/hashes 财务报告和审定财务报表 @noble/ciphers,只使用无害环境管理的软件包 SDK 负载, Jest 的 CommunityJS 运行时间 否则失败 SyntaxError: Unexpected token 'export'。要编译您的脚本 ts-jest,设置变换 .ts 只有,所以预设仍然汇编这些软件包:
// jest.config.js
module.exports = {
preset: '@frontmcp/testing/jest-preset-unit',
transform: { '^.+\\.tsx?$': 'ts-jest' },
};
testMatch 财务报告和审定财务报表 transformIgnorePatterns 将预设的列表复制到您的条目中.
固定设备
| 固定线 | 说明 |
|---|---|
mcp | 连接到服务器的客户端, 每次测试都要新 : tools, (中文(简体) ), resources, (中文(简体) ), prompts、原始请求、通知和日志 |
server | 运行中的服务器 : info (单位:千美元)baseUrl, (中文(简体) ), port, (中文(简体) ), pid, (中文(简体) ), createClient(), (中文(简体) ), createClientBuilder(), (中文(简体) ), restart(), (中文(简体) ), getLogs(), (中文(简体) ), clearLogs() |
auth | 让JWTs: createToken(), (中文(简体) ), createExpiredToken(), (中文(简体) ), createInvalidToken(), (中文(简体) ), users (单位:千美元)admin, (中文(简体) ), user, (中文(简体) ), readOnly, (中文(简体) ), getJwks(), (中文(简体) ), getIssuer(), (中文(简体) ), getAudience() |
test.beforeEach() 财务报告和审定财务报表 test.afterEach() 当他们的召回使用一个参数时,得到相同的固定装置.
匹配者
工具数字 : toContainTool, (中文(简体) ), toBeSuccessful, (中文(简体) ), toBeError, (中文(简体) ), toHaveTextContent, (中文(简体) ), toHaveImageContent, (中文(简体) ), toHaveResourceContent, (中文(简体) ), toPassOutputSchemaWhole
资源数字 : toContainResource, (中文(简体) ), toContainResourceTemplate, (中文(简体) ), toHaveMimeType
提示数字 : toContainPrompt, (中文(简体) ), toHaveMessages
议定书数字 : toBeValidJsonRpc, (中文(简体) ), toHaveResult, (中文(简体) ), toHaveError, (中文(简体) ), toHaveErrorCode
工具用户界面数字 : toHaveRenderedHtml, (中文(简体) ), toContainHtmlElement, (中文(简体) ), toContainBoundValue, (中文(简体) ), toBeXssSafe, (中文(简体) ), toHaveWidgetMetadata, (中文(简体) ), toHaveCssClass, (中文(简体) ), toNotContainRawContent, (中文(简体) ), toHaveProperHtmlStructure
使用他们通过 expect 此套件导出, 这是 Jest 的 expect 与这些匹配者键入. frontmcp test 编辑 @frontmcp/testing 预设注册,通过 @frontmcp/testing/setup,您可以添加到 setupFilesAfterEnv 你自己来.
配置
import { test } from '@frontmcp/testing';
test.use({
server: './src/main.ts', // the entry file, run with tsx
port: 3003, // default: a free port
transport: 'streamable-http', // or 'sse'
entryPath: '/mcp', // if the server sets http.entryPath
publicMode: true, // send no Authorization header, for auth: { mode: 'public' }
logLevel: 'debug', // the server's own log level
protocolVersion: '2026-07-28', // default: '2025-06-18'
mcpLogLevel: 'info', // the log messages the clients ask for; default: 'debug', false for none
env: { API_KEY: 'test' },
startupTimeout: 30_000,
});
打电话 test.use() 在文件的顶端配置其中或其中的每个测试 test.describe() 以配置该块,然后获得自己的服务器. baseUrl 测试一个已经运行的服务器而不是启动一个 .
通知
一个工具的进步和日志消息到达 mcp.notifications 时间 mcp.tools.call() 返回,来自FrontMCP服务器,在调用时发送它们(1.11.3和以后)。 除非 mcpLogLevel 说不说,每个进度更新都保持其 message。 。 。 .
议定书版本
客户会说MCP 2025-06-18 和任何修改,直到 2025-11-25 打开会话 initialize与 protocolVersion: '2026-07-28' 这是无国籍的:它与 server/discover,并随其 _meta 和镜像页眉MCP-Protocol-Version, (中文(简体) ), Mcp-Method, (中文(简体) ), Mcp-Name, (中文(简体) ), Mcp-Param-*),回答一个工具的 this.elicit() 结束 input_required 还有你的 mcp.onElicitation() 处理器,并按 subscriptions/listen。 。 。 . mcp.discover() 发送 server/discover 任何版本的客户端.
其他出口
| 导出 | 用它来 |
|---|---|
McpTestClient, (中文(简体) ), TestServer | 启动服务器并连接客户端, 无需固定 |
TestTokenFactory, (中文(简体) ), MockOAuthServer, (中文(简体) ), MockCimdServer | 签名令牌, 代理 OAuth 提供者, 并服务客户端 ID 元数据文件 |
MockAPIServer, (中文(简体) ), httpMock, (中文(简体) ), httpResponse | 回答 HTTP 调用您的工具制作 |
mockResponse, (中文(简体) ), interceptors | 隐藏或更改 MCP 请求 mcp 客户端 |
perfTest, (中文(简体) ), LeakDetector, (中文(简体) ), MetricsCollector | 测量内存和时间,并发现漏洞 |
文档
@frontmcp/testing数字 :test,则mcp客户端、结果包装和运行测试- 固定设备: 每一个
test.use()选项和mcp, (中文(简体) ),server财务报告和审定财务报表auth固定装置 - 匹配者: 每个匹配者检查的内容
- 拦截器和HTTP取笑数字 :
mcp.mock, (中文(简体) ),mcp.intercept, (中文(简体) ),MockAPIServer财务报告和审定财务报表httpMock - 测试认证: 令牌、模拟 OAuth 服务器并签名
- 测试您的服务器:引言
相关软件包
@frontmcp/sdk: 正在测试的服务器的构建框架frontmcp: 国家综合倡议,其frontmcp test运行您的测试@frontmcp/observability: 有过createTestTracer()检查测试记录的跨度
捐款
资料来源: libs/testing欢迎提出问题和拉动请求;见 捐款额。 。 。 .
许可证
阿帕奇2.0 (英语). 见 自由主义。 。 。 .