2016-07-26 2 views
1

단위 테스트를 수행 할 수 있도록 Angular.js 컨트롤러에 대한 메소드를 작성하는 방법을 이해하는 데 어려움을 겪고 있습니다. 인터넷의 모든 자습서는 간단하며 실생활 응용 프로그램에서 어떻게 보이는지 보여주지 않습니다. 이 튜토리얼은 모든 메소드가 "스코프"또는 "this (aka VM)"에 첨부 됨으로써 노출된다는 것을 보여줍니다. 내 이해에서, 컨트롤러 외부에서 사용되지 않는 메소드는 노출 될 필요가 없습니다. 아래 예제에서는 페이지의 단추를 클릭하여 트리거되기 때문에 두 가지 메서드 만 노출합니다. 나머지 방법은 내부 목적으로 만 사용됩니다. 컨트롤러의 개인 메서드를 노출하지 않고 테스트하는 방법은 무엇입니까? 단위 테스트를하기 위해서는이 모든 것을 노출해야합니까? 모든 방법을 폭로하는 것이 좋은 습관입니까? 확실히 단지 단위 테스트를 위해 개인 방법을 노출하지 않는 것이 좋습니다 당신단위 테스트를 허용하는 Angular의 코드를 작성하는 올바른 방법

angular.module('app.pool',[]) 
    .controller('PoolController', PoolController); 

function PoolController(PoolService) { 
    var vm = this; 

    vm.candidateName=''; 
    vm.candidatePicUrl=''; 

    vm.approveCandidate = approveCandidate; 
    vm.refuseCandidate = refuseCandidate; 

    function approveCandidate() { 
     PoolService.approveCandidate(); 
     getNextCandidate(); 
    } 

    function refuseCandidate() { 
     PoolService.refuseCandidate(); 
     getNextCandidate(); 
    } 

    function getNextCandidate() { 
     clearProfile(); 
     PoolService.getNextCandidate(). 
     success(displayUserData); 
    } 

    function displayUserData(data) { 
     vm.candidateName = getCandidateName(data); 
     vm.candidatePicUrl = getCandidateProfilePic(data); 
    } 

    function getCandidateName(data) { 
     return data.userName; 
    } 

    function getCandidateProfilePic(data) { 
     return changeUrlToBiggerPic(data.profilePicture); 
    } 

    function changeUrlToBiggerPic(url) { 
     return url.replace('s150x150', 's600x600'); 
    } 

    function clearProfile() { 
     vm.candidateName = ""; 
     vm.candidatePicUrl = ""; 
    } 

}

답변

1

감사드립니다.

특정 출력을 기대하여 이러한 메소드가 수행중인 작업을 테스트 할 수 있어야합니다. 예를 들어

: 범위 변수가 기대 값으로 설정되었는지

  • 체크.
  • 올바른 입력으로 제공된 종속성 (스파이)이 호출되었는지 확인하십시오.
0

항상 경우에 따라 다르지만 예, 일반적으로 개인 클래스 메서드를 노출하는 것이 좋습니다.

개인 메서드는 공용 메서드와 구별하기 위해 _ 접두사 규칙을 사용하여 명명 할 수 있으며 Object.defineProperty으로 선택적으로 열거 할 수 없습니다.

JavaScript는 비공개 멤버 (로컬 변수)를 반영 할 수 없습니다. 근본적인 OOP 원리와 일반적으로 '좋은 점'이되는 것 외에도 캡슐화는 JS의 테스트 가능성을 손상 시키며 대가로 제공 할 것이 거의 없습니다.

캡슐화는 JS 응용 프로그램에 보안을 추가하지 않으며 블랙 박스로 장치를 취급해도 아무런 도움이되지 않습니다. 반면에 모든 소위 말하는 방법에 간첩을 두는 것이 도움이됩니다.

+1

내 개인적인 감사는 0 개의 의견으로 전체 질문을 downvote하기 위해 자신의 소중한 포인트를 아끼지 않은 낯선 사람에게 간다. 귀중한 의견은 높이 평가되었습니다. – estus

관련 문제