# 测试指南

更新日期：2026-03-24

本文档只描述当前项目已落地、已验证的测试路径。

## 1. 环境要求

- Go 1.25+
- Node.js 20+
- Windows PowerShell 环境下，如 `npm.ps1` 被策略拦截，请使用 `npm.cmd`

如果本机 Go 全局缓存目录受限，建议在执行 Go 命令前显式指定本地缓存目录：

```powershell
$env:GOMODCACHE = "D:\project\.cache\gomod"
$env:GOPATH = "D:\project\.cache\gopath"
$env:GOCACHE = "D:\project\.cache\go-build"
```

## 2. 后端验证

### 单元与集成测试

```powershell
go test ./... -count=1
```

如需执行默认回归之外的大并发压力测试，请显式开启：

```powershell
$env:RUN_STRESS_TESTS = "1"
go test ./... -count=1
```

### 静态检查

```powershell
go vet ./...
```

### 构建验证

```powershell
go build ./cmd/server
```

### 健康检查验证

启动服务后可验证：

```powershell
curl http://localhost:8080/health
curl http://localhost:8080/health/live
curl http://localhost:8080/health/ready
```

说明：

- `/health` 兼容历史探针，语义等同 readiness
- `/health/live` 只验证进程存活
- `/health/ready` 会检查数据库可用性

## 3. 前端验证

在 [`frontend/admin`](/D:/project/frontend/admin) 下执行：

```powershell
npm.cmd run test:run
npm.cmd run lint
npm.cmd run build
```

当前已补充并验证的前端重点包括：

- 认证服务契约测试
- 登录页按 `auth/capabilities` 动态展示登录方式
- 忘记密码入口按 `password_reset` 能力显隐

## 4. 真实浏览器验证

当前环境下 `playwright test` runner 会因 `spawn EPERM` 受限，因此真实浏览器验证主路径不是 runner，而是“外部启动真实浏览器 + Playwright 库经 CDP 接管”。
当前 CDP 验证脚本会把以下信号视为失败：

- console error
- native dialog
- popup page
- page error
- request failure
- `401` 响应
- 被前端 `window` guard 拦截的 `alert/confirm/prompt/open`

Windows 下 `e2e:full:win` 与 `e2e:auth-smoke:win` 都会自动把 Go 缓存写到 `%TEMP%\\ums-e2e-cache`，避免工作区权限问题。

### 全量真实浏览器 E2E

```powershell
cd D:\project\frontend\admin
npm.cmd run e2e:full:win
```

当前覆盖：

- `login-surface`
  - 登录页能力展示
  - 未登录访问受保护路由重定向
- `auth-workflow`
  - 真实登录
  - 用户列表
  - 用户详情抽屉
  - 分配角色弹窗
  - 角色页
  - 分配权限弹窗
  - Dashboard
  - 真实登出与登出后重定向
- `responsive-login`
  - desktop / tablet / mobile 视口渲染与横向溢出检查
- `desktop-mobile-navigation`
  - 桌面侧边导航
  - 移动端抽屉导航

### 补充页面与路由 smoke

```powershell
cd D:\project\frontend\admin
npm.cmd run e2e:smoke:win
```

当前覆盖：

- 未登录访问 `/dashboard`、`/users` 会重定向到 `/login`
- 登录页按后端能力动态显示可用登录方式
- 忘记密码入口按能力显隐
- 多视口下页面可正常渲染

### 补充真实认证链路 smoke

```powershell
cd D:\project\frontend\admin
npm.cmd run e2e:auth-smoke:win
```

当前覆盖：

- 从受保护路由跳转到登录页
- 真实登录后回到目标页面
- 用户列表加载
- 用户详情抽屉打开
- 分配角色弹窗打开
- 角色管理页跳转
- 分配权限弹窗打开
- Dashboard 加载
- 真实登出后再次访问受保护页面会被重定向到登录页

## 5. 边界说明

- 当前支持的 CDP 路径已经是浏览器级真实验证，不是 DOM mock。
- 当前支持的 CDP 路径不是完整 OS 级自动化。
  - 不覆盖系统文件选择器、原生桌面弹窗、操作系统级权限窗口等行为。
- `e2e:full:win` 是当前受支持的主验收路径；`smoke` 脚本保留为补充诊断，不代表产品运行时仍依赖 smoke。
- 测试层的 smoke 脚本和 mock helper 是允许的，但它们不应继续进入产品运行时。
- 认证相关接口当前会统一返回 `Cache-Control: no-store` 等响应头；如果在抓包或浏览器开发者工具中看不到缓存命中，这是预期行为。
