| 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; |
| }); |
| } |
|
|