用 padEnd() 可实现测试报告字段右对齐,提升控制台可读性:统一设定测试名30字符、状态8字符、耗时6字符宽度;结合模板字符串组装更直观;动态计算最大名称长度并加缓冲适配长名;兼容ANSI颜色需用 string-width 等库计算可视宽度。

用 padEnd() 给测试项名称、状态、耗时等字段统一右对齐或左对齐,能让控制台报告清晰易读,避免手动拼接空格出错。
固定宽度对齐关键字段
测试名、结果、耗时这三类信息长度不一,直接拼接会错位。用 padEnd() 为每项预留固定宽度,再填充空格即可对齐:
- 比如设定测试名占 30 字符:`testName.padEnd(30)`
- 状态(如 "PASS" / "FAIL")占 8 字符:`status.padEnd(8)`
- 耗时字符串(如 "12ms")占 6 字符:`timeStr.padEnd(6)`
这样无论测试名是 "login with valid credentials" 还是 "smoke test",后续字段都从同一列开始。
结合模板字符串提升可读性
把 padEnd() 和模板字符串组合,让组装逻辑一目了然:
const line = `${test.name.padEnd(30)} ${result.padEnd(8)} ${duration.padEnd(6)}\n`;
比用加号拼接更直观,也方便后续扩展(比如加颜色标记)。
动态计算最大宽度适配长名称
若测试名差异极大(如含路径或参数),可先遍历所有用例,找出最长名称长度,再统一 pad:
- 收集所有
test.name.length,取Math.max(...lengths) - 加上缓冲(如 +4),作为最终
padEnd(width)的宽度值 - 避免因个别超长名导致整列偏移,又不至于浪费太多空白
兼容 ANSI 颜色代码不破坏对齐
加颜色时,ANSI 转义序列(如 \x1b[32m)本身不可见但占字符串长度,直接 pad 会多算。解决方法:
- 先用正则去掉颜色码再测长度:
stripAnsi(str).length - 或封装一个安全的
padEndVisible(),内部处理颜色字符 - 推荐用现成库如
string-width,它能正确计算带 ANSI 码的可视宽度
否则绿色 PASS 可能比红色 FAIL 多占两格,对齐就乱了。
不复杂但容易忽略——对齐的本质是“视觉位置一致”,而 padEnd() 是最轻量、原生、可控的实现方式。

















