53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
const { spawnSync } = require('node:child_process');
|
|
|
|
const { createLogger, isVerbose, startTimer } = require('../src/generator/utils/logger');
|
|
|
|
const log = createLogger('test');
|
|
|
|
function collectTestFiles(repoRoot) {
|
|
const testDir = path.join(repoRoot, 'test');
|
|
if (!fs.existsSync(testDir)) return [];
|
|
|
|
return fs
|
|
.readdirSync(testDir)
|
|
.filter((name) => name.endsWith('.js'))
|
|
.map((name) => path.join('test', name))
|
|
.sort();
|
|
}
|
|
|
|
async function main() {
|
|
const elapsedMs = startTimer();
|
|
log.info('开始', { version: process.env.npm_package_version });
|
|
|
|
const repoRoot = path.resolve(__dirname, '..');
|
|
const files = collectTestFiles(repoRoot);
|
|
if (files.length === 0) {
|
|
log.ok('未发现测试文件,跳过');
|
|
return;
|
|
}
|
|
|
|
const result = spawnSync(process.execPath, ['--test', ...files], {
|
|
cwd: repoRoot,
|
|
stdio: 'inherit',
|
|
});
|
|
|
|
const exitCode = result && Number.isFinite(result.status) ? result.status : 1;
|
|
if (exitCode !== 0) {
|
|
log.error('失败', { ms: elapsedMs(), exit: exitCode });
|
|
process.exitCode = exitCode;
|
|
return;
|
|
}
|
|
|
|
log.ok('完成', { ms: elapsedMs(), files: files.length });
|
|
}
|
|
|
|
if (require.main === module) {
|
|
main().catch((error) => {
|
|
log.error('执行失败', { message: error && error.message ? error.message : String(error) });
|
|
if (isVerbose() && error && error.stack) console.error(error.stack);
|
|
process.exitCode = 1;
|
|
});
|
|
}
|