Compare commits

..

4 Commits

2 changed files with 66 additions and 0 deletions
+7
View File
@@ -4,6 +4,13 @@
"role": "Maya",
"location": "app/log.js",
"suggestion": "log.js 檔案中的 ok, warn, error 函數是應用程式的日誌工具。雖然功能簡單,但為這些工具函數編寫單元測試是一個良好的實踐,以確保它們正確地呼叫 console 對應的方法(如 console.log, console.warn, console.error)並輸出預期的格式。這有助於防止未來意外的行為變更。",
"is_new": false
},
{
"level": "info",
"role": "Maya",
"location": "app/log.test.js",
"suggestion": "`log.test.js` 的新增非常棒,提供了良好的覆蓋率。為了進一步提升測試的完整性,建議考慮為 `line`, `ok`, `warn`, `error` 函數新增測試案例,以驗證當傳入空字串時的行為。雖然這些函數的行為相對簡單,但測試空字串可以確保邊界情況下的輸出符合預期。",
"is_new": true
}
]
+59
View File
@@ -0,0 +1,59 @@
import { describe, it, afterEach, mock } from 'node:test';
import assert from 'node:assert/strict';
import { section, step, line, ok, warn, error } from './log.js';
afterEach(() => mock.restoreAll());
describe('log helpers', () => {
it('formats section and step messages', () => {
const calls = [];
mock.method(console, 'log', (...args) => {
calls.push(args.join(' '));
});
section('Pipeline');
step('Step1', 'Start');
assert.deepEqual(calls, [
'\n=== Pipeline ===',
'\n[Step1] Start',
]);
});
it('formats line and ok messages with console.log', () => {
const calls = [];
mock.method(console, 'log', (...args) => {
calls.push(args.join(' '));
});
line('hello');
ok('done');
assert.deepEqual(calls, [
' - hello',
' ✓ done',
]);
});
it('formats warn messages with console.warn', () => {
const calls = [];
mock.method(console, 'warn', (...args) => {
calls.push(args.join(' '));
});
warn('careful');
assert.deepEqual(calls, [' ! careful']);
});
it('formats error messages with console.error', () => {
const calls = [];
mock.method(console, 'error', (...args) => {
calls.push(args.join(' '));
});
error('boom');
assert.deepEqual(calls, [' x boom']);
});
});