test(calculate-version): 補強測試覆蓋並拆分混合測試案例
- 新增 logger section/info/error 的輸出格式測試 - config 補上 GITEA_REPOSITORY 驗證測試,並拆分 isUnset/requireEnv 的正反例 - version 補回 compareVersionArrays 的 major 跨區段比較案例 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
b8804c5218
commit
a9d137ac9e
@@ -0,0 +1,55 @@
|
||||
'use strict';
|
||||
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
|
||||
const logger = require('../logger');
|
||||
|
||||
// 暫時攔截 process.stdout.write,回傳期間內寫出的內容
|
||||
function captureStdout(fn) {
|
||||
const original = process.stdout.write;
|
||||
let out = '';
|
||||
process.stdout.write = (chunk) => { out += chunk; return true; };
|
||||
try {
|
||||
fn();
|
||||
} finally {
|
||||
process.stdout.write = original;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
// 暫時攔截 process.stderr.write,回傳期間內寫出的內容
|
||||
function captureStderr(fn) {
|
||||
const original = process.stderr.write;
|
||||
let out = '';
|
||||
process.stderr.write = (chunk) => { out += chunk; return true; };
|
||||
try {
|
||||
fn();
|
||||
} finally {
|
||||
process.stderr.write = original;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
test('section 以主/次分隔線包夾標題輸出至 stdout', () => {
|
||||
const out = captureStdout(() => logger.section('參數檢查'));
|
||||
const line = '='.repeat(50);
|
||||
const subline = '-'.repeat(50);
|
||||
assert.equal(out, `\n${line}\n參數檢查\n${subline}\n`);
|
||||
});
|
||||
|
||||
test('info 以 [info] 前綴與換行輸出至 stdout', () => {
|
||||
const out = captureStdout(() => logger.info('IS_BETA=false'));
|
||||
assert.equal(out, '[info] IS_BETA=false\n');
|
||||
});
|
||||
|
||||
test('error 以 [error] 前綴與換行輸出至 stderr', () => {
|
||||
const out = captureStderr(() => logger.error('GITEA_SERVER_URL 未設定'));
|
||||
assert.equal(out, '[error] GITEA_SERVER_URL 未設定\n');
|
||||
});
|
||||
|
||||
test('error 僅輸出不終止行程,呼叫後仍可繼續執行', () => {
|
||||
let reached = false;
|
||||
captureStderr(() => { logger.error('still alive'); reached = true; });
|
||||
assert.equal(reached, true);
|
||||
});
|
||||
Reference in New Issue
Block a user