chore(test): 新增统一测试入口与端到端场景模拟脚本

- scripts/run-memind-tests.mjs:按改动文件自动匹配 test + verify 范围
  (quick/changed/guards/release/full 模式),配套 memind-test skill
- scripts/run-scenario-test.mjs + scenario-test-lib.mjs:真实登录 + 多轮
  聊天 + 页面生成 + 公网可访问性的端到端模拟,配套 memind-scenario-test
  skill 与首个场景 scenarios/suzhou-page.json
- package.json 新增 test:memind / test:scenario 脚本别名

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-07-07 10:55:31 +08:00
parent ec8d0464a3
commit b4171ca268
10 changed files with 1340 additions and 0 deletions
@@ -0,0 +1,108 @@
---
name: memind-scenario-test
description: >-
Run Memind end-to-end scenario simulations (login, multi-turn chat, page
generation, public URL checks). Use when the user asks for 模拟场景测试, 场景测试,
E2E 流程验证, 模拟用户操作, or describes a step-by-step chat/page test flow.
---
# Memind 场景模拟测试
用户说「**帮我模拟场景测试**」或描述多步聊天/做页面流程时,**必须**走本 skill,不要手动拼 curl 或浏览器点选。
## 唯一入口
```bash
node scripts/run-scenario-test.mjs --scenario <id>
```
列出场景:
```bash
node scripts/run-scenario-test.mjs --list
```
## 前置条件
1. 本地 Portal 已运行(默认 `http://127.0.0.1:8081`,可用 `pnpm dev`
2. goosed / agent 链路可用(场景会真实发消息并等待 agent 回复)
3. 账户默认 `john` / `888888`;密码可用 `JOHN_PASSWORD` 覆盖
启动前检查:
```bash
curl -sf http://127.0.0.1:8081/auth/status
```
## 默认场景:苏州攻略页面
对应用户定义的流程,场景文件 [`scenarios/suzhou-page.json`](../../../scenarios/suzhou-page.json)
1. 登录 `john` / `888888`
2. 发送 `hi`,等待 assistant 回复
3. 发送 `帮我看看苏州攻略,1日攻略,做一个页面`
4. 验证:收到回复、含苏州关键词、有公网页面链接、HTTP 200、页面内容命中关键词
执行:
```bash
node scripts/run-scenario-test.mjs --scenario suzhou-page
```
## Agent 工作流
1. **确认场景**:用户未指定时默认 `suzhou-page`;说了别的流程则查 `--list` 或新建场景文件
2. **确认服务**Portal `/auth/status` 必须 200
3. **执行脚本**:完整跑完,不要中途改用浏览器手点
4. **失败处理**:读失败项 → 修代码或环境 → 重跑同一场景
5. **汇报**:用下方模板
## 扩展新场景
复制 [`scenarios/_template.json`](../../../scenarios/_template.json) 为 `scenarios/<id>.json`
步骤类型(当前支持):
| action | 说明 |
|--------|------|
| `login` | HTTP 登录,取 cookie + userId |
| `chat` | 发消息(同 session 多轮),等 run 终态 + assistant 新回复 |
`chat.expect` 可选断言:
- `assistantMinChars` / `timeoutMs`
- `replyKeywords`:回复文本关键词
- `page.keywords` / `requirePublicLink` / `requireHttp200` / `requireMindspaceCover`
新增更复杂步骤(截图、微信、多账户)时:先扩展 `scripts/scenario-test-lib.mjs`,再加场景 JSON,**不要**在 skill 里写死一次性命令。
## 结果模板
```markdown
## 场景测试结果
- 场景:suzhou-page(苏州攻略一日游页面)
- Portalhttp://127.0.0.1:8081
- 账户:john
- 结果:通过 / 失败
### 步骤
1. 登录 — 通过
2. hi → 回复 — 通过(N 字)
3. 苏州页面 — 通过 / 失败
### 页面(如有)
- 链接:
- HTTP
- 关键词:
### 失败项与下一步
```
## 与 memind-test 的分工
| 诉求 | 用哪个 |
|------|--------|
| 模拟真实用户聊天 + 做页面 | **本 skill**`run-scenario-test.mjs` |
| 改代码后跑单测/回归守卫 | `memind-test` skill`run-memind-tests.mjs` |
| 103 发包 | `portal-release` skill |
+78
View File
@@ -0,0 +1,78 @@
---
name: memind-test
description: >-
Run Memind scoped or release tests automatically after code changes. Use when
the user asks to test, verify, run tests, check regressions, or before
merging/releasing; also after editing protected MindSpace/chat/agent paths.
---
# Memind 自动测试
不要手动拼凑 `node --test` 命令。统一入口:
```bash
node scripts/run-memind-tests.mjs --mode <mode>
```
## 选模式
| 用户意图 | 模式 |
|----------|------|
| 改完代码、日常验证 | `changed`(默认) |
| 快速冒烟 | `quick` |
| 只跑回归守卫 | `guards` |
| 发包前 | `release` |
| 全量单测 | `full` |
示例:
```bash
node scripts/run-memind-tests.mjs
node scripts/run-memind-tests.mjs --mode quick
node scripts/run-memind-tests.mjs --mode release
```
对比基准分支时用 `--base origin/main`
## Agent 工作流
1. **判断模式**:用户说「测试/验证/跑一下」→ `changed`;说「发包前」→ `release`;说「全量」→ `full`
2. **执行**:在仓库根目录跑脚本,不要跳过。
3. **失败时**:读报错 → 修代码 → 用同一模式重跑,直到通过。
4. **汇报**:用下方模板,不要只说「通过了」。
## 受保护路径(改后必跑 guards)
改这些文件时,即使 `changed` 未命中也要加跑 `guards`
- `mindspace-public-finish-sync.mjs``chat-finish-sync.mjs`
- `conversation-display.mjs``src/utils/message.ts``src/hooks/useTKMindChat.ts`
- `mindspace-pages.mjs``mindspace-page-sync-service.mjs``server.mjs`
```bash
node scripts/run-memind-tests.mjs --mode guards
```
详见 [docs/regression-guards/README.md](../../../docs/regression-guards/README.md)。
## 结果模板
```markdown
## 测试结果
- 模式:`changed` / `quick` / `guards` / `release` / `full`
- 变更文件:N 个(列出关键路径)
- 执行:X 个 test + Y 个 verify
- 结果:通过 / 失败
### 失败项(如有)
- 命令:
- 错误摘要:
- 下一步:
```
## 与发布 skill 的关系
- 日常开发:本 skill + `changed` / `guards`
- 103 生产发布:用 `portal-release` skill,其发包前测试与本 skill 的 `release` 模式一致
- 不要混用「手动挑几个 test 文件」替代上述入口