77 lines
2.8 KiB
JavaScript
Raw Permalink Normal View History

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