2011-01-05 5 views
0

개인 기능이 호출 된 경우 을 보려고합니다. 결국 나는 그 안에 설정되는 변수를 찾아야 할 것입니다.Javascript Unittesting Jasmine/Unit Testing - 개인 기능이 호출되었는지 테스트하려면 어떻게해야합니까?

내 자바 스크립트는 우리가 엄격의 인스턴스를 다루는이 arent 같은 기능과

mysamplefunction = function(item){ 

    /* figure out bla */  
    _myprivatefunction(item,bla) 

} 

_myprivatefunction = function(item, bla){ 


    /* do lots of exciting private things with item and bla */ 
} 
재스민은 다음 구문을 기대하는 것 같다

..

spyOn(mysamplefunction ,'_myprivatefunction'); 

그러나 개인 기능을 다음 다음과 같습니다 mysamplefunction 및 _myprivatefunction은 메서드가 아닙니다. (이 클래스는 다른 클래스입니다.)이 함수를 작동시키는 방법을 모르겠습니다. 어떤 아이디어? 당신이 그것을 설명으로 함수를 선언하는 경우

+0

어, 확실히 증명 기능은 구현 세부 사항이며 테스트해야하는 것이 아닙니다. – annakata

+0

@annakata 현실 세계에서는 실제로는 사적인 것이어야하지만 실제로 작동하는지 테스트해야합니다. 내가 자바에 있었다면 접근 방법을 변경하기 위해 리플렉션을 사용했을 것입니다. 그런 다음 행복하게 실행할 수 있습니다. 이러한 유형의 접근은 JavaScript에서 가능하지 않습니다. – wmitchell

답변

1

, 내가 기대 :

spyOn(window, '_myprivatefunction'); 

작동 할 수 있습니다. 함수가 폐쇄 내에있는 경우

다음 window는 유일한 요구 사항은이 _myprivatefunction의 속성을 포함하는 객체, 예를 들어 있다는 것이다

TopLvlHeir.2ndlvel.samplefunctionpkg.publicTesting 

과 같이에게이 될 것입니다 firstArg[secondArg]은 함수입니다.

+0

저는 실제로 spyon/_myprivatefunction이 실제로 호출하지 않도록 호출되었는지 확인하고 싶습니다. – wmitchell

+0

@wmitchell, 알아요. 내 대답은 여전히 ​​유효합니다. 함수를 전혀 호출하지 않습니다. 그러나 전역 범위에서'_myprivatefunction'을 선언했기 때문에 그것이 속한 객체는'window'입니다. 그러므로 내 코드는'window' 객체의'_myprivatefunction'' 속성을 감시하고 있습니다. –

+0

나는 닫힌 톤이 있으므로 _myprivatefunction은 창에서 숨겨져 있지만 공용 인터페이스에 추가했습니다. TopLvlHeir.2ndlvel.samplefunctionpkg.publicTesting_myprivatefunction의 라인을 따라 뭔가가 당신의 예제에서 창이 무엇을 의미하는지 알아 내려고합니다. – wmitchell

관련 문제