fix: 修复保存后刷新网页图层全变成1的问题

问题原因:
1. LogicFlow 的 render() 方法不会自动应用节点的 zIndex 属性
2. 切换标签时,LogicFlow Label 插件对空 _label 数组处理有误导致渲染失败
3. 渲染失败后节点 zIndex 被重置为默认值 1

解决方案:
1. 在 App.vue 中,render() 后立即从保存的数据中恢复每个节点的 zIndex
2. 在 normalizeGraphData() 中清理空的 _label 数组,避免 Label 插件报错
3. 简化 FlowEditor.vue 中的 normalizeAllNodes(),移除不必要的重新分配逻辑
4. 清理调试日志,保持代码整洁

测试:
- 添加节点并调整图层顺序
- 切换标签页
- 刷新浏览器
- 确认图层顺序保持不变
This commit is contained in:
2026-02-13 19:28:21 +08:00
parent 92aa4094f5
commit 9227a61c85
21 changed files with 3175 additions and 62 deletions

203
src/__tests__/SUMMARY.md Normal file
View File

@@ -0,0 +1,203 @@
# 测试文件整理完成 ✅
## 📁 新的文件结构
```
src/__tests__/
├── README.md # 📖 测试文件总览(从这里开始)
├── TEST-RULES.md # 📋 测试规范文档(必读)
├── README-测试报告.md # 📊 测试报告和问题分析
├── setup.ts # ⚙️ 测试环境配置
├── layer-management/ # 📂 图层管理测试
│ ├── README.md # 图层管理测试说明
│ ├── real-scenario.spec.ts # ✅ 真实场景测试(活跃)
│ ├── mock-test.spec.ts.bak # 🗄️ Mock 测试(已废弃)
│ ├── integration-test.spec.ts.bak # 🗄️ 集成测试(已废弃)
│ └── unit-test.spec.ts.bak # 🗄️ 单元测试(已废弃)
├── schema.test.ts # Schema 验证测试
└── useStore.test.ts # Store 测试
```
---
## ✨ 主要改进
### 1. 文件组织
- ✅ 创建了 `layer-management/` 目录,集中管理图层相关测试
- ✅ 将 Mock 测试重命名为 `.bak`,标记为已废弃
- ✅ 保留了真实场景测试作为推荐方案
### 2. 文档完善
-**README.md** - 测试文件总览和快速开始
-**TEST-RULES.md** - 详细的测试规范和最佳实践
-**README-测试报告.md** - 当前测试结果和问题分析
-**layer-management/README.md** - 图层管理测试说明
### 3. 测试规范
明确了测试原则:
#### ✅ 推荐:真实场景测试
```typescript
// 使用真实的 LogicFlow 实例
const lf = new LogicFlow({ ... })
const node = lf.addNode({ ... })
lf.setElementZIndex(node.id, 'top')
// 能发现真实问题!
const graphData = lf.getGraphRawData()
expect(graphData.nodes[0].zIndex).toBeDefined() // ❌ 失败!
```
#### ❌ 不推荐Mock 测试
```typescript
// 使用模拟类
class MockLogicFlow { ... }
// 只能验证理想逻辑,无法发现真实问题
```
---
## 🚀 快速开始
### 运行测试
```bash
# 运行所有测试
npm test
# 运行图层管理测试
npm test -- layer-management
# 运行真实场景测试
npm test -- real-scenario
# 监听模式
npm run test:watch
# 查看详细输出
npm test -- --reporter=verbose
```
### 查看文档
1. 先看 **README.md** - 了解整体结构
2. 再看 **TEST-RULES.md** - 学习测试规范
3. 参考 **layer-management/real-scenario.spec.ts** - 学习如何编写测试
---
## 📊 当前测试状态
### 图层管理测试9 个测试)
-**通过**: 5/9
-**失败**: 4/9
### 发现的真实问题
1. **zIndex 不会保存到数据中**
- `getGraphRawData()` 返回的数据中没有 zIndex
- 导致导出/导入会丢失图层信息
2. **置底操作逻辑错误**
- 置底后 zIndex 变成 998/996
- 应该是比所有节点都小的值
这些问题是通过**真实场景测试**发现的Mock 测试无法发现!
---
## 🎯 测试原则总结
### 为什么要用真实场景测试?
| 对比项 | Mock 测试 | 真实场景测试 |
|--------|-----------|--------------|
| 能否发现真实问题 | ❌ 不能 | ✅ 能 |
| 测试可靠性 | ⚠️ 低 | ✅ 高 |
| 接近用户体验 | ❌ 不接近 | ✅ 接近 |
| 维护成本 | ⚠️ 高(需要同步更新 Mock | ✅ 低 |
### 何时使用 Mock
只在以下情况使用:
- 外部 API 调用HTTP 请求)
- 时间相关的测试(定时器)
- 文件系统操作
- 难以复现的场景(网络错误)
**核心业务逻辑必须使用真实场景测试!**
---
## 📚 文档导航
### 必读文档
1. **[README.md](./README.md)** - 从这里开始
2. **[TEST-RULES.md](./TEST-RULES.md)** - 测试规范(必读)
3. **[README-测试报告.md](./README-测试报告.md)** - 当前问题分析
### 模块文档
- **[layer-management/README.md](./layer-management/README.md)** - 图层管理测试
### 示例代码
- **[layer-management/real-scenario.spec.ts](./layer-management/real-scenario.spec.ts)** - 真实场景测试示例
---
## 🔧 下一步
### 1. 修复发现的问题
参考 **README-测试报告.md** 中的解决方案:
- 修复 zIndex 持久化问题
- 修复置底操作逻辑
### 2. 添加更多真实场景测试
参考 **layer-management/real-scenario.spec.ts**,为其他功能添加测试:
- 节点拖拽
- 节点复制粘贴
- 节点分组
- 数据导入导出
### 3. 提高测试覆盖率
目标:
- 核心功能80%+ 覆盖率
- 用户关键路径100% 覆盖率
---
## ✅ 完成清单
- [x] 创建 `layer-management/` 目录
- [x] 移动并重命名测试文件
- [x] 废弃 Mock 测试(重命名为 .bak
- [x] 创建 README.md总览
- [x] 创建 TEST-RULES.md规范
- [x] 创建 layer-management/README.md模块说明
- [x] 验证测试可以正常运行
- [x] 更新测试报告
---
## 🎉 总结
现在你有了:
1. **清晰的文件结构** - 测试文件按模块组织
2. **完善的文档** - 从入门到进阶的完整指南
3. **真实场景测试** - 能够发现真实代码问题
4. **测试规范** - 明确的最佳实践
**最重要的是**:真实场景测试已经发现了 2 个真实的 bug这是 Mock 测试无法做到的!