2014-11-10 3 views
1

저는 AngularJs에서 실행되는 응용 프로그램을 테스트하기 위해 jasmine을 사용하고 있습니다. 내 기능은 활성화 값과 스크롤을 확인하는 간단한 작업입니다. 'scroll'의 값이 'activate'값보다 클 때 함수는 스크롤 이벤트에서 unbind이어야합니다. 같은 :unbind() 메서드가 존재하지 않습니다.

it('should call unbind method', function() { 
    spyOn(angular.element, 'unbind'); 
    triggerEventOnElement('scroll', $window); 
    expect(angular.element.unbind).toHaveBeenCalled(); 
}); 
+0

요소 선택기를 사용하는 대신'$ window' 서비스를 직접 사용할 수 있습니까? – thomaux

+0

아니요, 찾지 못했습니다. 이것은 'unbind() 메소드가 존재하지 않습니다.'오류입니다. –

답변

0

는이 경우 테스트 까다로운 조금이다

scope.fA = function() { 
    if (scroll >= activate) { 
    angular.element($window).unbind('scroll', scope.fA); 
    } 
}; 

angular.element($window).bind('scroll', scope.fA); 

당신이 내가 그것을 테스트입니다 방법이며, 분명히 잘못 인 나에게 spyOn(angular.element, 'unbind');expect(angular.element.unbind).toHaveBeenCalled(); 에 대한 올바른 구문을 알려 주시기 바랍니다 수 함수는 한정되어있다. 사실, 올바른 구문에 대한 단서가 없지만 다른 접근 방식으로 테스트 할 수 있습니다. scope.fAscroll 이벤트로 제한하는 대신 temp var를 만들고이를 bind으로 지정하여 스크롤하는 것이 좋습니다. 같은 :

var refFA; 
scope.FA = function() { 
    if (scroll >= activate) { 
    angular.element($window).unbind('scroll', refFA); 
    } 
}; 
refFA = scope.FA; 
angular.element($window).bind('scroll', refFA); 

을 그리고 대신에 당신에게 unbind에 더 나은 스파이 감시의 scope.FA 같은 : 다음

spyOn(scope, 'FA'); 

기능이 단지 unbinded, 당신의 요소에 어떤 클래스를 추가 스크롤을 트리거하고 기대하는 경우 확인하기위한 클래스가 거기에 있다는 것을 확인한 다음 클래스를 제거하고 다시 트리거 한 다음 클래스가 존재하지 않는다고 기대하십시오. 예, 너무 복잡하고 명확하지 않습니다.

var refFA; 
scope.FA = function() { 
    elem.addClass('fan-some-class'); 
    if (scroll >= activate) { 
    angular.element($window).unbind('scroll', refFA); 
    } 
}; 
refFA = scope.FA; 
angular.element($window).bind('scroll', refFA); 

시험 :하지만 그냥 우는 최종 코드 확인이 쓸 수있는 좀 더 코드

it('should unbind method', function() { 
    triggerEventOnElement('scroll', $window); 
    expect(elem.hasClass('fan-some-class')).toBe(true); 
    elem.removeClass('fan-some-class'); 
    triggerEventOnElement('scroll', $window); 
    expect(elem.hasClass('fan-some-class')).toBe(false); 
}); 

,하지만 당신은 감시에 대한 생각이없는 경우에 내 생각 unbind 방법이 해결책이 될 수 있습니다. 물론 그것은 최고의 것이 아닙니다.

+0

대단히 고마워요. 나는 그것을 시도하고 그것을 작동합니다. 이후로, 나는 그와 함께 갈 수 있다고 생각 다른 해결책이 없다 :) –

+0

그것이 도움이 된 것을 기쁘게) – Max

관련 문제