2014-02-10 4 views
0

Итак, у меня возникают проблемы с тестированием углового фильтра, который принимает массив, который ранее был отсортирован по свойству группы. Он использует свойство флага, чтобы указать, что элемент является первым наблюдением этой группы, а затем ложным для последующих наблюдений.Тестирование углового фильтра, возвращающего массив с жасмином

Я делаю это, чтобы иметь заголовок категории в пользовательском интерфейсе с директивой 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; 
})(); 

Спасибо!

ответ

0

Я выяснил свою проблему.

Когда я передавал элементы в список, я просто нажимал указатель на элемент несколько раз. Я не проходил в уникальных объектах, поэтому флаг был переопределен следующим флагом в массиве (я думаю). Итак, я только что выпустил 10 уникальных объектов, используя цикл, ввел их в массив и провел через фильтр. И это сработало.

Я не совсем уверен, что мой анализ правилен в отношении переопределения, потому что itemTwo не был помечен как уникальный, когда он был единственным itemTwo в массиве. Но тест работает так, как я ожидал бы сейчас, поэтому я собираюсь прекратить расследование проблемы.

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