我正在将代码库从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没有(返回正值) .
我用 return _.sumBy(...
替换了 _.each(...
,并且测试通过了,但我担心代码库中可能存在更多休眠问题 .
Any ideas as to which difference between the two libraries would cause this?
1 回答
原来这个问题实际上是在测试代码中 . 上面,
elements
在运行时是一个数组,但是取消引用Knockout可观察数组的结果 . 为测试创建的 Spy 提供了一个可观察的而不是一个数组 .下划线和lodash之间的区别在于lodash使用
Array.isArray
来确定传递的对象的类型 . 另一方面,下划线只检查函数中是否存在length
属性 .Underscore将该函数视为一个Object,lodash将其视为一个Array .