2016-02-24 2 views
0

Я в процессе миграции базы кода из Underscore 1.8.2 в lodash 4.5.1. После миграции произошел один тест.Подчеркивание и LoDash _.each

Тестирование кода было рекурсивным суммированием с использованием _.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(..., и тесты прошли, но я обеспокоен тем, что в базе кода могут быть более неактивные проблемы.

Любые идеи относительно того, какая разница между этими двумя библиотеками вызовет это?

+2

Что такое 'элементы'? – dandavis

ответ

0

Оказывается, проблема была в тестовом коде. Выше, elements был массивом во время выполнения, но является результатом разыменования наблюдаемого массива Knockout. Шпион, созданный для теста, предоставлял наблюдаемый вместо массива.

Разница между подчеркиванием и lodash здесь заключается в том, что lodash использует Array.isArray для определения типа переданного объекта. Подчеркивание с другой стороны просто проверяет наличие свойства length, которое существует в функциях.

Подчеркивание обрабатывало функцию как объект, lodash рассматривал его как массив.

Смежные вопросы