Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

77 lines
2.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Test-Runner自测 · GH-GMP-004 · 录册A02
*
* 测试test-runner模块自身的功能不递归执行自己
* 测试项:
* 1. discoverTests能发现测试文件
* 2. generateReport生成正确的报告结构
* 3. 报告verdict逻辑正确
*/
'use strict';
const path = require('path');
const { discoverTests, generateReport } = require('../src/test-runner');
let passed = 0;
let failed = 0;
function assert(condition, message) {
if (condition) {
passed++;
console.log(`${message}`);
} else {
failed++;
console.error(`${message}`);
}
}
console.log('\n🧪 test-runner-self.js · Test-Runner自测\n');
// Test 1: discoverTests
const testDir = path.join(__dirname);
const tests = discoverTests(testDir);
assert(Array.isArray(tests), 'discoverTests返回数组');
assert(tests.length >= 2, `发现>=2个测试文件实际${tests.length}`);
assert(tests.every(f => f.endsWith('.js')), '所有文件以.js结尾');
assert(tests.every(f => path.basename(f).startsWith('test-')), '所有文件以test-开头');
// Test 2: discoverTests对不存在的目录
const empty = discoverTests('/nonexistent/path/xxx');
assert(Array.isArray(empty) && empty.length === 0, '不存在的目录返回空数组');
// Test 3: generateReport全通过场景
const passResults = [
{ file: 'a.js', name: 'a', status: 'pass', duration: 10, output: 'ok', error: null },
{ file: 'b.js', name: 'b', status: 'pass', duration: 20, output: 'ok', error: null },
];
const passReport = generateReport(passResults);
assert(passReport.verdict === 'PASS', '全通过时verdict=PASS');
assert(passReport.summary.total === 2, '总数正确');
assert(passReport.summary.pass === 2, '通过数正确');
assert(passReport.summary.fail === 0, '失败数为0');
assert(passReport.summary.totalDuration === 30, '总耗时正确');
assert(passReport.reportVersion === '1.0.0', '报告版本号正确');
assert(passReport.generator.includes('LC-A02'), '生成器标记包含LC-A02');
// Test 4: generateReport有失败场景
const failResults = [
{ file: 'a.js', name: 'a', status: 'pass', duration: 10, output: '', error: null },
{ file: 'b.js', name: 'b', status: 'fail', duration: 20, output: '', error: 'assertion failed' },
];
const failReport = generateReport(failResults);
assert(failReport.verdict === 'FAIL', '有失败时verdict=FAIL');
assert(failReport.summary.fail === 1, '失败数=1');
// Test 5: generateReport空结果
const emptyReport = generateReport([]);
assert(emptyReport.verdict === 'PASS', '空结果时verdict=PASS');
assert(emptyReport.summary.total === 0, '空结果总数=0');
// ─── 结果 ──────────────────────────────────────────────
console.log(`\n📊 结果: ${passed} passed, ${failed} failed\n`);
if (failed > 0) {
process.exit(1);
}