2014-02-10 34 views
0

所以,我有問題測試角度過濾器,需要一個數組,先前已經按組屬性排序。它使用一個標誌屬性來指示該項目是該組的第一個觀測值,然後對後續觀測值爲false。測試角度過濾器返回一個數組與茉莉花

我這樣做有一個ng-repeat指令在UI中的類別標題。

當我測試過濾器時,輸出不會返回帶有標誌的數組,除非我爲返回數組創建新對象。這是一個問題,因爲它在網頁中運行時會導致無限循環。該代碼在網頁中僅向輸入對象添加標誌屬性時起作用。

是否有一些額外的步驟,我應該採取模擬角度如何處理過濾器,以便它輸出正確的數組?

這就是我現在測試的樣子。

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沒有被標記爲唯一。但是測試正如我現在所期望的那樣工作,所以我將停止調查問題。