Files
quantux_mcp/tests/repeater_test.js
T

50 lines
2.4 KiB
JavaScript

// Repeater test: verify template repetition + per-copy click navigation.
const fs = require('fs');
const { JSDOM, VirtualConsole } = require('jsdom');
const file = process.argv[2];
const html = fs.readFileSync(file, 'utf-8');
const errors = [];
const vc = new VirtualConsole();
vc.on('jsdomError', (e) => errors.push('jsdomError: ' + e.message));
const dom = new JSDOM(html, { runScripts: 'dangerously', pretendToBeVisual: true, virtualConsole: vc });
const window = dom.window;
const document = dom.window.document;
const sleep = (ms) => new Promise(r => setTimeout(r, ms));
let pass = 0, fail = 0;
function check(name, ok, detail) {
if (ok) { pass++; console.log(' PASS', name); }
else { fail++; console.log(' FAIL', name, detail || ''); }
}
async function main() {
await sleep(400);
console.log('app:', window.QUX_MODEL.name);
// count repeated cards: buttons labeled 查看
const btns = Array.prototype.slice.call(document.querySelectorAll('.qux-widget')).filter(el => el.textContent.trim() === '查看');
check('模板按钮被重复(≥2个)', btns.length >= 2, 'count=' + btns.length);
// count repeated titles 商品 #1
const titles = Array.prototype.slice.call(document.querySelectorAll('.qux-widget')).filter(el => el.textContent.trim() === '商品 #1');
check('模板标题被重复', titles.length >= 2, 'count=' + titles.length);
// repeated positions differ (grid)
if (btns.length >= 2) {
const p1 = { left: btns[0].style.left, top: btns[0].style.top };
const p2 = { left: btns[1].style.left, top: btns[1].style.top };
check('重复项位置不同(网格布局)', p1.left !== p2.left || p1.top !== p2.top, JSON.stringify([p1, p2]));
}
// click a repeated 查看 button -> navigate to 详情页
const nameEl = document.getElementById('screenName');
const before = nameEl.textContent;
if (btns.length) {
btns[1].dispatchEvent(new window.MouseEvent('click', { bubbles: true, cancelable: true }));
await sleep(300);
const after = nameEl.textContent;
check('点击重复的查看按钮跳转', after === '详情页', `${before} -> ${after}`);
}
if (errors.length) { console.log('RUNTIME ERRORS:'); errors.slice(0, 5).forEach(e => console.log(' -', e)); fail++; }
console.log(`\n结果: ${pass} 通过, ${fail} 失败`);
process.exit(fail ? 1 : 0);
}
main().catch(e => { console.error('TEST CRASH:', e); process.exit(1); });