const fs = require('fs'); const path = require('path'); const assert = require('assert'); console.log('--- 开始测试:商品详情富文本编辑器修复验证 ---'); const addHtmlPath = path.join(__dirname, '../application/admin/view/shopro/goods/goods/add.html'); const goodsJsPath = path.join(__dirname, '../public/assets/js/backend/shopro/goods/goods.js'); // 1. 验证 add.html 模板结构 console.log('测试 1: 验证 add.html 中编辑器 DOM 结构合规性...'); assert(fs.existsSync(addHtmlPath), 'add.html 必须存在'); const addHtml = fs.readFileSync(addHtmlPath, 'utf8'); // 验证没有在 el-form 内非法嵌套 form role="form" assert(!addHtml.includes('
\n '), 'el-form-item 内不应存在未闭合或多余的 '); assert(addHtml.includes(''), '必须存在 id="goodsContent" class="editor" 的文本域'); assert(addHtml.includes('class="editor-wrap"'), '必须使用合法的 div 包装容器'); console.log(' [PASS] add.html 结构验证通过,已彻底移除 HTML 规范禁止的嵌套 form 标签。'); // 2. 验证 goods.js 中的编辑器控制逻辑 console.log('测试 2: 验证 goods.js 中的 initEditor 与 Tab 切换监听...'); assert(fs.existsSync(goodsJsPath), 'goods.js 必须存在'); const goodsJs = fs.readFileSync(goodsJsPath, 'utf8'); assert(goodsJs.includes('function initEditor()'), 'goods.js 必须包含 initEditor 函数'); assert(goodsJs.includes("watch(() => state.activeStep, (newStep) => {"), 'goods.js 必须监听 state.activeStep 变化'); assert(goodsJs.includes("if (newStep == 4)"), 'goods.js 必须在切换到商品详情 Tab(值为 4)时触发'); assert(goodsJs.includes("nextTick(() => {"), 'goods.js 必须在 nextTick 中初始化以确保 DOM 元素可见'); console.log(' [PASS] goods.js 中 initEditor 和 Tab 切换响应式逻辑验证通过。'); // 3. 验证 bindevent 容错容器解析 console.log('测试 3: 验证 Controller.api.bindevent 的容器容错解析...'); assert(goodsJs.includes('$("#goodsContent").closest("form")'), 'bindevent 必须包含对最近的 form 容器查找'); assert(goodsJs.includes('$("#addEdit")'), 'bindevent 必须包含兜底的父容器解析'); console.log(' [PASS] Controller.api.bindevent 容器容错解析逻辑验证通过。'); // 4. 验证 onConfirm 富文本内容读取逻辑 console.log('测试 4: 验证 onConfirm 内容读取与提取逻辑...'); assert(goodsJs.includes("$editor.summernote('code')"), 'onConfirm 必须优先从 summernote 实例提取内容'); assert(goodsJs.includes("$editor.val()"), 'onConfirm 必须包含回退读取 textarea val 的容错'); console.log(' [PASS] onConfirm 内容安全提取与回退逻辑验证通过。'); console.log('--- 全部测试通过!商品详情富文本编辑器修复逻辑完全正确! ---');