我正在将代码库从Underscore 1.8.2迁移到lodash 4.5.1。迁移后有一项测试失败。
正在测试的代码是使用_.each
的递归求和。
function foo(elements) {
if (elements.isContainer()) {
var sum = 0;
_.each(elements, function(element) {
sum += foo(element);
});
return sum;
} else {
return elements.someAttr ? 1 : 0;
}
}
使用应为空的数组进行测试,结果需要0
。 underscore.each
成功,但是lodash没有(返回正值)。
我将_.each(...
替换为return _.sumBy(...
,测试通过,但我担心代码库中可能存在更多休眠问题。
关于两个库之间的差异会导致这种情况的任何想法吗?
答案 0 :(得分:0)
事实证明问题实际上在测试代码中。上面,elements
在运行时是一个数组,但是取消引用Knockout可观察数组的结果。为测试创建的间谍提供了一个可观察的而不是数组。
下划线和lodash之间的区别在于lodash使用Array.isArray
来确定传递的对象的类型。另一方面,下划线只检查函数中是否存在length
属性。
Underscore将该函数视为一个Object,lodash将其视为一个数组。