- Intercept Ctrl+Z/Y keyboard shortcuts in keydown listener and route
to custom undoStack/redoStack to fix undo inconsistency.
- Replace execCommand('insertHTML') with precise Range.insertNode()
in insertSmartField to prevent <span> escaping out of <p> when
preceded by <br>.
3.0 KiB
3.0 KiB
测试方案 — 2026-04-17-13-32-07
测试目标
验证 TemplateManage.tsx 中以下两项修复是否生效且无副作用:
Ctrl+Z/Ctrl+Y/Ctrl+Shift+Z快捷键正确调用自定义 Undo/Redo。- 在段落末尾(含
<br>)插入smart-field-wrapper不再换行错位。
测试步骤
1. 编译检查
npm run lint
- 预期结果:
tsc --noEmit通过,0 errors。
2. 快捷键 Undo/Redo 测试
前置条件:登录后进入 /template-manage,选中任意模板。
2.1 删除字段后撤销
- 在编辑器中点击一个已有的
smart-field-wrapper的 × 按钮(或通过 Backspace/Delete 删除字段)。 - 立刻按下
Ctrl+Z。
- 预期结果:被删除的字段完整恢复,内容与样式均正常。
2.2 撤销后再重做
- 完成步骤 2.1 后,按下
Ctrl+Y(或Ctrl+Shift+Z)。
- 预期结果:刚刚恢复的字段再次被删除。
2.3 插入字段后撤销
- 从右侧字段库点击任意字段插入到编辑器。
- 按下
Ctrl+Z。
- 预期结果:刚插入的字段消失,编辑器恢复到插入前的状态。
2.4 多次撤销
- 连续进行多次编辑操作(插入字段、删除字段、输入文字)。
- 连续多次按
Ctrl+Z。
- 预期结果:每次按
Ctrl+Z都按自定义历史栈顺序回退一步;不会触发浏览器原生 undo 造成状态混乱。
3. 插入字段排版测试
前置条件:编辑器中存在一个以 <br> 结尾的 <p> 标签,例如:
<p style="font-family: SimSun;">
<strong>手术日期:</strong><br>
</p>
3.1 在 <br> 后插入字段
- 将光标放到
<strong>手术日期:</strong>后面的空白处(即<br>附近)。 - 从右侧字段库点击
手术日期字段插入。
- 预期结果:
smart-field-wrapper出现在<p>标签内部,与<strong>手术日期:</strong>保持在同一行,不会跑到<p>外面形成新段落。
3.2 段中插入字段
- 在正常段落(如
姓名:xxx)中间插入字段。
- 预期结果:字段与前后文字保持在同一行,排版正常。
3.3 已有字段附近插入
- 在已有的
smart-field-wrapper前后插入新字段(只要字段 key 不同,允许插入)。
- 预期结果:新字段正确插入,不会与已有字段重叠或被挤到下一行。
4. 回归测试
- 保存模板:进行任意编辑后点击「保存模板」,刷新页面,确认内容已持久化。
- 打印预览:点击打印预览按钮,确认字段显示正常。
- 工具栏撤销/重做按钮:确认点击工具栏的撤销/重做按钮依然工作正常。
- Backspace/Delete 边界拦截:确认光标紧邻字段时按 Backspace/Delete 仍然只删除字段本身,不会误删整段。
判定标准
- 所有编译检查和手工测试均通过,方可认为任务完成。
- 若任一测试失败,回滚修改并重新分析根因。