77 lines
2.8 KiB
JavaScript
77 lines
2.8 KiB
JavaScript
/**
|
||
* 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);
|
||
}
|