Files
danyang-match/ui-tests/miniapp-language-contracts.mjs
T
WorkBuddy c0298c27a5 fix(miniapp): 小程序界面全量中文化,消除英文/非中文枚举码上屏
- 新增 miniapp/constants/profileLabels.js 作为「枚举码→中文简体」唯一字典
  (婚姻/子女/学历/职业/吸烟饮酒/择偶子女/红娘状态),覆盖表单值与种子
  实际值两套并集,保证详情页无论后端返回哪种码都显示中文
- 修复「择偶条件-子女」下拉英文选项(any/accept/reject→不限/可接受/不接受),
  改用 value/label 数组 + range-key="label"
- 修复 recommend-card / user-card / profile-detail / profile-confirm 直接渲染
  后端枚举码(educationCode/maritalStatus/occupationCode…)的问题,改由
  observers 派生中文 label 上屏
- 清理残留英文文案:Required 条件→必须符合的条件、喜欢TA/向Ta→喜欢对方/向对方、
  U51 服务预约→服务预约、U64 公益服务记录→公益服务记录
- 修复 7 个英文窗口标题与 3 个英文占位页正文
- matchmaker 历史服务状态消除原始码兜底,统一走字典
- 加固 scripts/audit-miniapp-language.mjs(A 整行先剥离 mustache、B 排除
  bind:action 处理器、F 窗口标题、JPG/PNG 入白名单)
- 新增 ui-tests/miniapp-language-contracts.mjs 语种守卫(复用审计脚本,断言 0 命中),
  UI 契约门禁 MIN_GUARDS 21→22;已做负向注入验证判别力
2026-09-23 11:19:17 +08:00

55 lines
2.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import assert from 'node:assert/strict'
import { spawnSync } from 'node:child_process'
import { dirname, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
/**
* 小程序界面语种契约守卫
* ============================
* 复用 scripts/audit-miniapp-language.mjs 的全量扫描(A 文本节点 / B 属性 /
* C picker 选项 / D JS 文案字段 / E 繁体字 / F 窗口标题),断言「0 命中」。
*
* 为什么必须独立成守卫:2026-09 真机事故——后端枚举码(never_married / bachelor /
* any / accept / reject)直接当展示值上屏,静态类型检查 / WXML·WXSS 编译 / 结构
* 守卫全都抓不到,只有人眼在真机才看得见。这是「界面必须全中文简体」唯一的自动化兜底。
*
* 单一事实源:本守卫不重复实现扫描逻辑,而是直接派生 audit 脚本——改扫描规则只改一处。
*/
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..')
const auditScript = resolve(root, 'scripts/audit-miniapp-language.mjs')
const r = spawnSync(process.execPath, [auditScript, '--json'], {
cwd: root,
encoding: 'utf8',
env: { ...process.env, NO_COLOR: '1' },
})
let findings = []
if (r.status === 3) {
// 审计脚本自身崩溃(异常分支),绝不能当成「通过」默默绿掉
throw new Error(
'语种审计脚本执行失败(exit 3),请先修复 scripts/audit-miniapp-language.mjs:\n' +
(r.stderr || r.stdout || '(无输出)'),
)
}
if (r.stdout && r.stdout.trim()) {
try {
findings = JSON.parse(r.stdout)
} catch {
// 理论上 --json 只输出 JSON;解析失败则交给下面的长度断言兜底
}
}
assert.equal(
findings.length,
0,
`小程序仍存在英文/非中文简体上屏(${findings.length} 处)。示例:\n` +
findings
.slice(0, 8)
.map((f) => ` ${f.file}:${f.line} [${f.kind}] ${f.detail}`)
.join('\n'),
)
console.log(`Miniapp language contracts passed(语种审计 0 命中)`)