2016-09-30 5 views
0

시계에서 트리거되는 각도 지시문 함수가 있습니다. 얼마나 범위의 범위를 벗어난 함수 scroll의 스크롤 활동을 기반으로 타임 아웃을 테스트합니까?시계를 통해 지시 함수를 테스트하십시오.

scope.$watch('elementId', function(value) { 
    //How do i test scroll function contents? 
    scroll(element, value); 
}); 

function scroll (pE, element) { 
    console.log('Here'); 
    $timeout(function afterTimeout() { 
    var scrollTo = $('#' + element); 
    var container = $(pE); 
    container.animate({scrollTop : scrollTo[0].offsetTop - container[0].offsetTop - 10}, 'slow'); 
    }, 250); 
} 

자세한 코드는 내가 코드를 정리하기 위해 몇 가지 제안이 여기 http://jsfiddle.net/QGmCF/68/

+1

실제 DOM을 단위 테스트하는 것은 그리 만족스러운 작업이 아닙니다. $ timeout 호출을 테스트하는 방법은 http://stackoverflow.com/a/37527210/3731501을 참조하십시오. 범위에 있지 않기 때문에 범위에 있는지 쉽게 테스트 할 수 있음을 이미 알고 있습니다. Scroll 함수를 스코프/컨트롤러 메소드로 노출하면 테스트 가능성에 도움이됩니다. – estus

+0

아, 알았어. 저것 좀 봐. 감사합니다! – prem89

답변

1

입니다. 가장 먼저 알아야 할 것은 모의 $timeout 객체를 테스트에 삽입하고 코드가 실행되는지 확인하기 위해 $timeout.flush(251)을 호출해야한다는 것입니다. 이처럼

:

it('test watch', inject(function($compile, $rootScope, $timeout) { 
    // as before 
    $timeout.flush(251); 
    // test that your code has run 
})); 

또 다른 제안 : 대신 jQuery의 $ 객체를 사용하는 브라우저의 기본 구성 요소에 액세스 할 수 $window.document 또는 $document[0]를 사용합니다.

var scrollTo = $document[0].getElementById(element); 

을 한 후 더 이상 [0]scrollTo 요소에 액세스 할 필요가 없습니다 : 이와 함께, 당신은이를 작성할 수 있습니다.