最清晰可靠的验证方式是直接用断言比对过滤或转换后的结果与预期值;重点验证“改得对不对”,需检查返回值而非原数组,对象数组应校验关键字段,字符串方法重在格式,链式操作只验最终输出。

直接用断言比对过滤或转换后的结果与预期值,是最清晰可靠的验证方式。重点不是“有没有改”,而是“改得对不对”。
用 filter() 后验证新数组内容
filter 不修改原数组,所以必须检查返回值,而不是原数组本身。
- 先定义原始数组和预期结果,比如:const arr = [1, 2, 3, 4, 5]; const expected = [2, 4];
- 调用 filter 得到实际结果:const actual = arr.filter(n => n % 2 === 0);
- 用严格相等断言逐项比对(注意数组不能直接用 ===):expect(actual).toEqual(expected); 或 assert.deepStrictEqual(actual, expected);
- 顺便验证原数组未被改动:assert.deepStrictEqual(arr, [1, 2, 3, 4, 5]);
对象数组过滤要校验属性而非引用
过滤对象时,容易误判“对象相等”。应只比关键字段,避免因内存地址不同而失败。
- 例如过滤 active 用户:const users = [{id: 1, name: 'a', active: true}, {id: 2, name: 'b', active: false}];
- 预期结果不是整个对象,而是其 id 或 name 列表:const expectedIds = [1];
- 提取并比对:const actualIds = result.map(u => u.id); expect(actualIds).toEqual(expectedIds);
- 若需完整对象比对,确保测试数据是固定结构,或用 toStrictEqual 配合浅层对象(无函数、undefined 等)
字符串转换类方法(如 join、toString)验证分隔效果
这类方法输出是字符串,验证重点在格式是否符合预期,包括分隔符、空格、顺序等。
- 测试 join('-'):expect(['a', 'b', 'c'].join('-')).toBe('a-b-c');
- 测试 toString():expect([1, 2, 3].toString()).toBe('1,2,3'); 注意它不加空格
- 边界情况别漏掉:空数组 [].join('|') 应得空字符串;单元素数组 ['x'].join(',') 就是 'x'
链式操作后验证最终输出,而非中间步骤
filter + map + sort 连用很常见,测试时只关心最终结果是否符合业务逻辑,不必拆解每一步。
- 例如:“取年龄 ≥25 的用户,按姓名升序,只留 name 字段”:arr.filter(u => u.age >= 25).map(u => u.name).sort();
- 直接写预期:expect(result).toEqual(['Alice', 'Zoe']);
- 避免为 map 或 sort 单独写测试——除非它们是独立导出的工具函数
- 性能敏感场景可额外加长度断言,比如 expect(result.length).toBeLessThanOrEqual(10);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











