Files
hopechen067andClaude Opus 5.5 1ae69ab95e fix: 设置页脚本因重复声明 xt 整体加载失败(服务商选不了、所有设置不生效)
- settings.js 的局部变量改名为 api,避开 contextBridge 暴露的不可重声明全局 xt
- dev-mock 按 contextBridge 的方式定义 xt,浏览器预览也能暴露同类问题
- 加测试:渲染脚本禁止在顶层声明 xt
- 版本 0.1.2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 03:54:20 -04:00

37 lines
1.3 KiB
JavaScript

'use strict';
// 主进程依赖 Electron,单元测试 require 不到;至少保证每个源文件都能被解析。
const test = require('node:test');
const assert = require('node:assert');
const fs = require('fs');
const path = require('path');
const { execFileSync } = require('child_process');
function jsFiles(dir) {
return fs.readdirSync(dir, { withFileTypes: true }).flatMap((e) => {
const p = path.join(dir, e.name);
if (e.isDirectory()) return jsFiles(p);
return e.name.endsWith('.js') ? [p] : [];
});
}
test('src 下所有 JS 文件语法正确', () => {
const files = jsFiles(path.join(__dirname, '..', 'src'));
assert.ok(files.length > 10);
for (const f of files) {
try {
execFileSync(process.execPath, ['--check', f], { stdio: 'pipe' });
} catch (err) {
assert.fail(`${path.relative(process.cwd(), f)}\n${err.stderr}`);
}
}
});
test('渲染进程脚本不在顶层声明 xt(会与 contextBridge 暴露的全局冲突,整个脚本加载失败)', () => {
const dir = path.join(__dirname, '..', 'src', 'renderer');
for (const name of fs.readdirSync(dir).filter((n) => n.endsWith('.js') && n !== 'dev-mock.js')) {
const src = fs.readFileSync(path.join(dir, name), 'utf8');
assert.doesNotMatch(src, /^(const|let|var|function|class)\s+xt\b/m, name);
}
});