Итак, у меня возникают проблемы с тестированием углового фильтра, который принимает массив, который ранее был отсортирован по свойству группы. Он использует свойство флага, чтобы указать, что элемент является первым наблюдением этой группы, а затем ложным для последующих наблюдений.Тестирование углового фильтра, возвращающего массив с жасмином
Я делаю это, чтобы иметь заголовок категории в пользовательском интерфейсе с директивой ng-repeat.
Когда я тестирую фильтр, вывод не возвращает массив с флагами, если я не создаю новые объекты для возвращаемого массива. Это проблема, потому что она вызывает бесконечный цикл при работе на веб-странице. Код работает на веб-странице, когда он просто добавляет свойство флага к входному объекту.
Есть ли какой-то дополнительный шаг, который я должен предпринять, чтобы имитировать, как угловые ручки фильтруют, чтобы он выводил правильный массив?
Вот что мой тест выглядит прямо сейчас.
describe('IsDifferentGroup', function() {
var list, itemOne, itemTwo, itemThree;
beforeEach(module("App.Filters"));
beforeEach(function() {
list = [];
itemOne = new ListItem();
itemTwo = new ListItem();
itemThree = new ListItem();
itemOne.group = "A";
itemTwo.group = "B";
itemThree.group = "C";
list.push(itemOne);
list.push(itemOne);
list.push(itemOne);
list.push(itemOne);
list.push(itemTwo);
list.push(itemThree);
list.push(itemThree);
list.push(itemThree);
list.push(itemThree);
list.push(itemThree);
});
it('should flag the items true that appear first on the list.', (inject(function (isDifferentGroupFilter) {
expect(list.length).toBe(10);
var result = isDifferentGroupFilter(list);
expect(result[0].isDifferentGroup).toBeTruthy();
expect(result[1].isDifferentGroup).toBeFalsy();
expect(result[4].isDifferentGroup).toBeTruthy();
expect(result[5].isDifferentGroup).toBeTruthy();
expect(result[6].isDifferentGroup).toBeFalsy();
expect(result[9].isDifferentGroup).toBeFalsy();
})));
});
А вот что-то вроде кода с фильтром:
var IsDifferentGroup = (function() {
function IsDifferentGroup() {
return (function (list) {
var arrayToReturn = [];
var lastGroup = null;
for (var i = 0; i < list.length; i++) {
if (list[i].group != lastGroup) {
list[i].isDifferentGroup = true;
lastAisle = list[i].group;
} else {
list[i].isDifferentGroup = false;
}
arrayToReturn.push(list[i]);
}
return arrayToReturn;
});
}
return IsDifferentGroup;
})();
Спасибо!