代码库测试查看器
一个用于代码库的测试查看器应用程序,有助于可视化测试覆盖率、测试数据以及代码和测试之间的关系。
特性
- 文件浏览器:使用简单的文件资源管理器浏览和导航您的代码库
- 文件查看器:查看包含相关测试元数据的文件内容
- 测试可视化:思维导图可视化,显示代码和测试之间的关系
- 测试详细信息:测试信息的详细视图,包括输入数据和预期输出
- MCP集成:LLM代理提交测试元数据的模型上下文协议端点
建筑
后端(Go)
- 纯净
net/http处理程序(无外部框架) - 测试元数据的JSON文件持久性
- LLM集成的MCP(模型上下文协议)端点
- RESTful API端点
前端(React+TypeScript)
- 具有文件资源管理器、文件预览和测试面板的三面板布局
- 基于SVG的思维导图可视化
- 无外部UI依赖关系
Docker 快速入门
运行应用程序最简单的方法是使用Docker Compose:
# Build and run
docker-compose up
# Access the application
open http://localhost:8080该应用程序将:
- 为前端提供服务
http://localhost:8080 - 在提供API端点
http://localhost:8080/api/* - 将元数据存储在
./metadata/metadata.json - 从当前目录浏览文件
路径合同
服务器处理 -dir 标记为规范代码库根。通过REST API或MCP工具发送的每条路径必须 相对于该根的repo.
- 对的:
internal/files/service.go - 不正确:
/app/internal/files/service.go - 不正确:
/workspace/internal/files/service.go
当您在不同的容器中运行代理和查看器时,这很重要。在今天的这个仓库中,代理容器在以下位置挂载仓库 /app,而Docker Compose服务器将其挂载在 /workspace相对路径在两个容器之间都是可移植的;绝对路径不是。
手动构建
先决条件
- Go 1.22+(兼容Go 1.25.4)
- Node.js 18+
- npm
构建前端
cd frontend
npm install
npm run build构建后端
go build -o server ./cmd/server跑
./server -port 8080 -dir . -metadata metadata.json当在主机上运行时, -dir . 意味着所有API和MCP文件路径必须相对于当前存储库根。
API终点
文件操作
| 方法 | 端点 | 描述 |
|---|---|---|
| 得到 | `/api/files?path= | |
| ` | 列出文件/目录 | |
| 得到 | `/api/files/ | |
| ` | 获取文件内容+元数据 | |
| 得到 | `/api/files/ | |
| /tests` | 获取文件的相关测试 |
MCP端点
| 方法 | 端点 | 描述 |
|---|---|---|
| 职位 | /api/mcp | MCP JSON-RPC 2.0端点 |
支持的MCP方法
initialize-初始化MCP会话tools/list-列出可用工具tools/call-执行工具(例如。,submit-test-metadata)prompts/list-列出可用提示prompts/get-获取特定提示
使用MCP端点
提交测试元数据
使用 submit-test-metadata 注册测试信息的工具:
curl -X POST http://localhost:8080/api/mcp \\
-H "Content-Type: application/json" \\
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "submit-test-metadata",
"arguments": {
"sourceFile": "internal/files/service.go",
"tests": [
{
"testFile": "internal/files/service_test.go",
"testName": "TestListFiles",
"lineRange": {"start": 10, "end": 25},
"inputLines": {"start": 12, "end": 15},
"outputLines": {"start": 20, "end": 22}
}
]
}
}
}'sourceFile 和 testFile 必须始终是相对于repo的路径。不要提交容器特定的绝对路径。
获得LLM提示
curl -X POST http://localhost:8080/api/mcp \\
-H "Content-Type: application/json" \\
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "prompts/get",
"params": {
"name": "codebase-tests-review",
"arguments": {
"functionName": "ListFiles",
"filePath": "internal/files/service.go"
}
}
}'filePath 和 testFilePath 对于MCP提示,遵循相同的规则:它们必须相对于服务器 -dir 根。
发展
前端开发
对于使用热重载的前端开发:
cd frontend
npm run dev开发服务器将代理 /api/* 请求 http://localhost:8080.
仅运行后端
go run ./cmd/server -port 8080 -dir . -metadata metadata.json排除路径错误
如果你看到一个错误,比如 path "/app/..." is outside configured codebase root "/workspace",元数据或MCP请求使用了绝对容器路径。
通过以下方式修复:
- 使用repo相对路径重新提交元数据,例如
internal/files/service.go - 打开应用程序
Issues选项卡,用于修复或删除仍然引用无效路径的过时元数据条目
代码检查
您可以使用提供的Dockerfiles对Go和TypeScript运行linting检查:
# Run Golang lint
docker build -f Dockerfile.lint.golang -t lint-golang .
docker run --rm -v $(pwd):/workspace lint-golang
# Run TypeScript lint
docker build -f Dockerfile.lint.typescript -t lint-typescript .
docker run --rm -v $(pwd):/workspace lint-typescript项目结构
.
├── cmd/
│ └── server/ # Server entry point
├── internal/
│ ├── api/ # HTTP handlers and routing
│ ├── files/ # File operations and models
│ ├── mcp/ # MCP protocol implementation
│ └── metadata/ # Test metadata storage
├── frontend/ # React frontend
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── hooks/ # Custom React hooks
│ │ ├── api/ # API client
│ │ └── types/ # TypeScript types
│ └── public/
├── Dockerfile # Multi-stage Docker build
├── docker-compose.yml # Docker Compose configuration
└── go.mod # Go module definition配置
命令行标志
-port-服务器端口(默认:8080)-dir-用于提供文件的基本目录;这是所有API和MCP路径的规范根(默认值:当前目录)-metadata-元数据JSON文件的路径(默认:metadata.JSON)
环境变量(Docker)
PORT-服务器端口METADATA_PATH-元数据文件的路径
许可证
麻省理工学院
