는이 경우 테스트 까다로운 조금이다
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.fA
을 scroll
이벤트로 제한하는 대신 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
방법이 해결책이 될 수 있습니다. 물론 그것은 최고의 것이 아닙니다.
출처
2014-11-10 12:34:35
Max
요소 선택기를 사용하는 대신'$ window' 서비스를 직접 사용할 수 있습니까? – thomaux
아니요, 찾지 못했습니다. 이것은 'unbind() 메소드가 존재하지 않습니다.'오류입니다. –