js原始类型操作单元测试需覆盖边界值、类型转换与不可变性:字符串测空值/unicode/强制转换,数字测nan/-0/infinity,布尔测宽松输入;isxxx/toxxx函数须明确定义行为并验证纯函数特性,用object.is断言特殊相等性,快照辅助复杂输出校验。

JS 中原始类型操作的单元测试,核心是覆盖边界值、类型转换逻辑和不可变性行为。原始类型(string、number、boolean、null、undefined、symbol、bigint)本身不可变,但对其的操作函数(如字符串截取、数字格式化、布尔判断工具等)极易因隐式转换或边缘输入出错,测试必须直击这些风险点。
覆盖典型原始值与边界输入
原始类型看似简单,但实际使用中常出现意外值:空字符串、NaN、Infinity、-0、+0、超长数字、全空白字符串、Unicode 边界字符(如 emoji、代理对)。测试不能只用 "hello" 和 42。
- 字符串:测试
""、" "、"\t\n\r"、"a\u{1F600}"(?)、null、undefined、123(被强制转为字符串的数字) - 数字:测试
0、-0、NaN、Infinity、Number.MAX_SAFE_INTEGER + 1、"123"(字符串输入)、true(布尔输入) - 布尔:测试
true、false、"true"、1、""、[](验证工具函数是否严格判断)
验证类型守卫与安全转换
很多工具函数职责是“把任意输入转成期望原始类型”,例如 toNumber()、toString()、isString()。这类函数必须明确声明行为,并用测试固化。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 对
isXxx()函数,测试返回必须是严格布尔值(true/false),且不抛错——哪怕输入是undefined或循环引用对象 - 对
toXxx()函数,定义默认回退策略:比如toNumber(x, fallback = 0),需测toNumber(null)→0,toNumber("abc")→0,toNumber("42")→42 - 避免依赖全局方法隐式行为,例如
String(x)和x.toString()对null处理不同,测试应显式覆盖并选择其一作为约定
聚焦纯函数特性,禁用副作用
原始类型操作函数应是纯函数:相同输入必得相同输出,不修改入参,不读写外部状态。单元测试本身就是对其纯度的检验。
- 输入对象(如
{ value: "123" })时,确保函数不篡改该对象的任何属性 - 避免在测试中引入时间、随机数、DOM、localStorage 等外部依赖;若函数内部调用
Date.now(),应通过参数注入或 mock 替换 - 用
Object.is()替代===测试-0和NaN等特殊相等性,例如:expect(Object.is(myParse("-0"), -0)).toBe(true)
用快照辅助复杂输出结构
当原始类型操作结果是组合值(如格式化后的日期字符串、带单位的数字字符串、标准化后的 Unicode 字符串),单靠 toBe() 易遗漏细节。此时快照测试更可靠。
- 例如测试
normalizePhone("1-800-ABC-DEFG"),预期输出"+18002223334"—— 直接快照比手动拼写更防手误 - 快照同时记录
typeof和Object.prototype.toString.call()结果,可捕获意外返回对象而非字符串的问题 - 每次更新快照需人工确认,避免“盲目接受”导致逻辑退化










