格式化函数需精准处理单位切换与小数位:输入非负整数(字节),输出如"1.00KB"字符串;覆盖0、临界值(1024)、跨单位值(1536)、大数(1024⁴)及异常输入,确保单位正确、保留2位小数、边界健壮。

JavaScript 中测试文件大小格式化函数,核心是验证它对不同输入(尤其是边界值)能否输出符合预期的带单位字符串。重点不是测“能不能运行”,而是测“单位选得对不对、小数点保留得准不准、边界情况是否健壮”。
明确被测函数的输入输出契约
比如你用的是类似 formatFileSize(bytes) 这样的函数,先确认它的约定:
- 输入:一个非负整数,单位是字节(Bytes)
- 输出:形如
"1.23KB"、"0.00B"、"1024.00MB"的字符串 - 单位切换点:1024 字节 → KB,1024 KB → MB,以此类推(二进制前缀,不是十进制的 1000)
- 小数位:默认保留 2 位,如
1025字节应返回"1.00KB",不是"1KB"或"1.001KB"
覆盖关键测试用例
不用穷举所有数字,但以下几类必须覆盖:
-
零值和极小值:0 →
"0.00B";1 →"1.00B";1023 →"1023.00B" -
单位临界点:1024 →
"1.00KB";1024 * 1024 →"1.00MB";1024³ →"1.00GB" -
跨单位中间值:1536(1.5KB)→
"1.50KB";2097152(2MB)→"2.00MB" -
大数值与上限:比如支持到 TB,测试
1024⁴应返回"1.00TB";超范围可返回原始值或抛错,需与函数文档一致 -
异常输入:传入负数、
null、undefined、字符串"1024"—— 若函数不处理,测试应验证它是否按约定报错或返回兜底值(如"0.00B")
用 Jest 写一个简洁可读的测试示例
假设函数定义如下:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
function formatFileSize(bytes) {
if (bytes === 0) return '0.00B';
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
let i = 0;
let size = bytes;
while (size >= 1024 && i < units.length - 1) {
size /= 1024;
i++;
}
return `${size.toFixed(2)}${units[i]}`;
}对应测试可写为:
describe('formatFileSize', () => {
test('returns "0.00B" for 0', () => {
expect(formatFileSize(0)).toBe('0.00B');
});
<p>test('returns "1.00KB" for 1024', () => {
expect(formatFileSize(1024)).toBe('1.00KB');
});</p><p>test('returns "1.50KB" for 1536', () => {
expect(formatFileSize(1536)).toBe('1.50KB');
});</p><p>test('returns "1.00GB" for 1073741824', () => {
expect(formatFileSize(1073741824)).toBe('1.00GB');
});</p><p>test('handles negative input gracefully', () => {
expect(formatFileSize(-1)).toBe('0.00B'); // 或根据约定 throw
});
});注意浮点精度与单位数组长度
用 Math.log 计算单位的方法(如 Math.floor(Math.log(bytes)/Math.log(1024)))在极小值(如 1)时可能因浮点误差返回 -0 或计算偏移,导致单位错成 "KB"。测试中要包含 1、1023、1024 这三个紧邻值,确保单位切换干净利落。同时检查单位数组是否足够长——若函数支持 TB 但数组只到 GB,1024⁴ 就会越界返回 undefined,测试能立刻暴露这个问题。

















