用 padEnd() 对齐测试报告需统一各列宽度并预留缓冲:用例名36、状态6、耗时8;逐字段 padEnd 后拼接,避免制表符;中文字符需额外增宽;封装为 formatTestLine 函数便于复用与扩展。

用 padEnd() 让测试报告在控制台里整齐对齐,关键不是“填多少空格”,而是统一字段宽度、预留视觉间隙、兼顾中英文字符显示差异。
确定各列最大宽度并预留缓冲
测试报告通常含「用例名」「状态」「耗时」三列。先遍历所有用例,找出最长的用例名(比如 "should handle empty input correctly" 共 32 字符),再加 4 个字符缓冲(避免紧贴)——设为 36;状态列如 "PASS" 或 "FAIL" 固定 4 字,设为 6;耗时如 "12.5ms" 最长 6 字,设为 8。这些值就是各列调用 padEnd() 的目标长度。
逐行拼接并 padEnd 对齐
对每个测试结果,把字段依次转成字符串,调用 padEnd() 补齐到预设宽度,再用空格连接:
-
testName.padEnd(36)→ 确保名字右边界对齐 -
status.padEnd(6)→"PASS "或"FAIL " -
duration.padEnd(8)→"12.5ms "
组合后类似:"should handle empty input correctly PASS 12.5ms "。注意:不要用 \t,因终端制表位宽度不一致,padEnd() 才真正可控。
处理中文或全角字符时微调宽度
控制台里一个中文字符通常占两个英文字符宽度,但 padEnd() 按 Unicode 码点数计数(不是像素宽度)。若用例名含中文,如 "登录失败应提示错误信息"(10 字),实际显示宽度≈20 英文字符。此时可粗略按「英文字符数 + 中文字符数」估算总宽,或统一用等宽字体 + 英文空格填充更稳妥。简单方案:对含中文的字段,先用正则统计中文数量,再把目标宽度增加对应数量(例如每中文+1)。
封装成可复用的格式化函数
避免重复计算,把逻辑收进函数:
const formatTestLine = (name, status, duration) => {
const nameWidth = 36;
const statusWidth = 6;
const timeWidth = 8;
return `${name.padEnd(nameWidth)}${status.padEnd(statusWidth)}${duration.padEnd(timeWidth)}`;
};
// 使用
console.log(formatTestLine("test user login", "PASS", "24.1ms"));
// → "test user login PASS 24.1ms "
后续扩展支持颜色(配合 chalk)、分组标题、汇总行,都可在该函数基础上叠加,结构清晰不易错。

















