文件
Henglianshutong/tests/verify_goods_editor_fix_spec.js

46 行
2.9 KiB
JavaScript

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

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('<form role="form">'), 'add.html 不应包含非法的嵌套 <form role="form"> 标签');
assert(!addHtml.includes('</form>\n </el-form-item>'), 'el-form-item 内不应存在未闭合或多余的 </form>');
assert(addHtml.includes('<textarea id="goodsContent" class="editor"></textarea>'), '必须存在 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('--- 全部测试通过!商品详情富文本编辑器修复逻辑完全正确! ---');