2013-05-29 8 views
3

ng-grid 구성 요소를 래핑하는 지시문을 테스트하는 데 문제가 있습니다.지시문 내 단위 테스트 지시문

내가 문제를 보여줍니다이 punkler를 작성했습니다 : http://plnkr.co/edit/HlB8Bt9M2TzsyM6XaDso?p=preview

이 내가 아는 많은 코드입니다,하지만 난 그것보다 더 줄일 수 없습니다.

기본적으로 angle-ui에서 ng-grid 구성 요소를 래핑하는 custom-grid 지시문이 있습니다. 내 지시서를 만들었어요. 왜냐하면 제가 애플 리케이션에 그리드가 많아서 그리드의 구성을 복제하지 않기 때문입니다.

테스트 결과 상단에 표시된 눈금이이 지시문을 사용합니다. 그럼, 당신은 잘 작동 볼 수 있습니다 :)

그러나, 아마도 내가이 지시어를 테스트하는 방법에 대해 놓친 뭔가가있을 수 있습니다. 필자는 첫 번째 행에 'Martoni'라는 첫 번째 행이 표시되지만 실패했다고 주장하는 간단한 테스트를 작성했습니다. ng-grid 지시문을 사용하는 동일한 테스트.

내 테스트 코드에 어떤 오류가 있습니까?

답변

2

http://plnkr.co/edit/WwTyuQXNklL7CnjOxsB2?p=preview

나는 그들이 (특히, 및 ng-repeat 년대)에 $compile 서비스의 이용을 특히, 재귀 적으로 (또는 적어도 중첩-LY) 지시를 호출하기 전에 문제를 했어. 나는 거기에 버그가 있다고 확신하지만 나는 고립 된 사례를 찾기 위해 시간을 투자하지 않았다. 어쨌든 당신이 발견 한 것은 일종의 버그라고 생각하지만 쉬운 해결 방법이 있습니다.

ngGrid의 소스를 보면 너비가 충분히 크면 열만 추가된다는 것을 알 수 있습니다. 귀하의 두 번째 예를 들어 밟았을 때 w은 부정적 이었기 때문에 addCol은 결코 호출되지 않았습니다.

var w = col.width + colwidths; 
if (col.pinned) { 
    addCol(col); 
    var newLeft = i > 0 ? (scrollLeft + totalLeft) : scrollLeft; 
    domUtilityService.setColLeft(col, newLeft, self); 
    totalLeft += col.width; 
} else { 
    if (w >= scrollLeft) { 
     if (colwidths <= scrollLeft + self.rootDim.outerWidth) { 
      addCol(col); 
     } 
    } 
} 
colwidths += col.width; 

은 요소들이 단위 테스트되는 동안 그들은 문서에 실제로하지 않았기 때문에 수 0 높이/너비를 가지고 있다고 생각하는 나를 이끌었다.

그래서 그것을 해결하기 위해 나는 당신의 compile(elm)($scope);

angular.element('body').append(elm); 

하기 전에 다음 사항 그리고 정리에 추가 :이 고의 또는 아니었다면

afterEach(function() { 
    angular.element(elm).remove(); 
}); 

는 나도 몰라,하지만 당신은 전화 $new() on $rootScope 첫 번째 단위 테스트에서는 컴파일 결과를 사용하지 않았지만 두 번째 단위 테스트에서는 수행했습니다.

관련 문제