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:
@@ -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(苏州攻略一日游页面)
|
||||
- Portal:http://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 |
|
||||
@@ -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 文件」替代上述入口
|
||||
Reference in New Issue
Block a user