|
@@ -4284,26 +4284,31 @@ payload 里含模型里**不存在**的列时,`addContent` 会忽略该列照
|
|
|
|
|
|
|
|
**用户反馈**:「提交完问卷直接看不见了」——即作答后整张卡片消失。
|
|
**用户反馈**:「提交完问卷直接看不见了」——即作答后整张卡片消失。
|
|
|
|
|
|
|
|
-**根因(我上一版引入)**:写回后卡片内容变成 ,但**渲染层交给组件的 content 是带标记的**
|
|
|
|
|
-—— 切行器 对 block 行产出的是 :
|
|
|
|
|
|
|
+**根因(我上一版引入)**:写回后卡片内容变成 `{answers:[…]}`,但**渲染层交给组件的 content 是带标记的**
|
|
|
|
|
+—— 切行器 `StreamXMLFilter.handleBehavior` 对 block 行产出的是 `openTag + inner + closeTag`:
|
|
|
|
|
|
|
|
-而 里两个解析函数**一个剥标记、一个不剥**: 剥、 不剥
|
|
|
|
|
-→ 作答后只读分支解析失败、交互分支也解析不出 → 模板两个分支都不成立 → **卡片渲染成空**。
|
|
|
|
|
|
|
+```
|
|
|
|
|
+<question-cards>{"answers":[…]}</question-cards>
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+而 `QuestionCard` 里两个解析函数**一个剥标记、一个不剥**:`parseQuestions` 剥、
|
|
|
|
|
+`parseAnswersFromContent` 不剥 → 作答后只读分支解析失败、交互分支也解析不出 `questions`
|
|
|
|
|
+→ 模板两个分支都不成立 → **卡片渲染成空**。
|
|
|
|
|
|
|
|
**我的测试为什么没抓到(关键教训)**:续 43 的 [1] 节里,我**手工把标记切掉**再断言 JSON 合法
|
|
**我的测试为什么没抓到(关键教训)**:续 43 的 [1] 节里,我**手工把标记切掉**再断言 JSON 合法
|
|
|
—— 把渲染层给的是带标记内容这个事实自己抹平了,于是测试绿着、页面上卡片是空的。
|
|
—— 把渲染层给的是带标记内容这个事实自己抹平了,于是测试绿着、页面上卡片是空的。
|
|
|
**教训:组件解析类的验证必须走真实管线(真实切行器的输出),不能自己构造理想输入。**
|
|
**教训:组件解析类的验证必须走真实管线(真实切行器的输出),不能自己构造理想输入。**
|
|
|
|
|
|
|
|
**修法**:
|
|
**修法**:
|
|
|
-1. 新增纯函数模块 [](../src/utils/question-cards-content.ts):
|
|
|
|
|
- (统一解包)+ / ,
|
|
|
|
|
- 两个解析**走同一个解包逻辑**; 改为引用它(本地那两份实现删掉)
|
|
|
|
|
-2. 答案形状 也收到该模块(原来是 answers 模块自己定义一份)
|
|
|
|
|
|
|
+1. 新增纯函数模块 [`src/utils/question-cards-content.ts`](../src/utils/question-cards-content.ts):
|
|
|
|
|
+ `unwrapQuestionCardsContent`(统一解包)+ `parseQuestionsFromContent` / `parseAnswersFromContent`,
|
|
|
|
|
+ 两个解析**走同一个解包逻辑**;`QuestionCard.vue` 改为引用它(本地那两份实现删掉)
|
|
|
|
|
+2. 答案形状 `QuestionCardAnswer` 也收到该模块(原来是 answers 模块自己定义一份)
|
|
|
3. 验证脚本加【5】完整往返:**跑真实切行器** → 取问卷行 content(带标记)→ 两个解析函数分别断言,
|
|
3. 验证脚本加【5】完整往返:**跑真实切行器** → 取问卷行 content(带标记)→ 两个解析函数分别断言,
|
|
|
并加一条直接守卫:「**至少有一个分支能渲染**(否则整张卡片是空的)」
|
|
并加一条直接守卫:「**至少有一个分支能渲染**(否则整张卡片是空的)」
|
|
|
|
|
|
|
|
-**运行过的验证**: 22 → **29/29**(新增 6 项往返 + 1 项兼容);
|
|
|
|
|
-**变异测试**:把解包改成直接返回原文(=复现原 bug)→ **6 项失败**,其中就有那条至少有一个分支能渲染;
|
|
|
|
|
|
|
+**运行过的验证**:`verify-question-cards` 22 → **29/29**(新增 6 项往返 + 1 项兼容);
|
|
|
|
|
+**变异测试**:把解包改成直接返回原文(=复现原 bug)→ **6 项失败**,其中就有那条「至少有一个分支能渲染」;
|
|
|
还原后 29/29。回归:内联脚本 6/6、NLS 44/44、附件 57/57、toast 27/27、政策库 29/29、
|
|
还原后 29/29。回归:内联脚本 6/6、NLS 44/44、附件 57/57、toast 27/27、政策库 29/29、
|
|
|
DMS 字段契约 19/19、build 通过、vue-tsc 无新错、validate-harness 通过。
|
|
DMS 字段契约 19/19、build 通过、vue-tsc 无新错、validate-harness 通过。
|
|
|
|
|
|