JS实现类Lodash的without方法后assertEqual测试失败原因排查
问题根因
你自定义的assertEqual函数使用===严格相等运算符做判断,而数组属于JavaScript引用类型,without返回的新数组和测试用的预期数组[2, 3]是两个独立的内存对象,哪怕内部元素完全一致,===比较的结果也会是false,这就是测试失败的直接原因。
解决方案
你已经实现了专门用于数组内容对比的eqArrays函数,直接复用该函数调整断言逻辑即可,有两种可选实现方式:
方案1:直接修改现有测试语句
把最后一行测试代码替换为以下内容,用eqArrays的返回值和true做对比:
assertEqual(eqArrays(without([1, 2, 3], [1]), [2, 3]), true);
方案2:封装专用的数组断言函数
新增一个数组断言工具,后续测试数组时直接调用即可,代码更简洁:
const assertArraysEqual = function(actual, expected) { if (eqArrays(actual, expected)) { console.log(`✅✅✅ Assertion Passed: [${actual}] === [${expected}]`); } else { console.log(`🛑🛑🛑 Assertion Failed: [${actual}] !== [${expected}]`); } }; // 调用示例 assertArraysEqual(without([1, 2, 3], [1]), [2, 3]);
修改完成后重新运行代码即可看到测试通过的提示。
内容的提问来源于stack exchange,提问作者Abubakar Oluyinka
相关产品推荐
相关产品推荐

