2017-05-16 6 views
0

각도 단위의 재스민을 사용한 단위 테스트에서 새로운 기능입니다.각도 단위 spyOn(). and.callthrough가 실제 함수를 호출하지 않습니다.

loadSomething (id)이라는 기능을 가진 서비스를 현재 테스트하고 있으며 그 안에 console.info를 추가했습니다.

MY 서비스 :

function loadSomething(id) 
{ 
    console.info('this is a test message'); 
    return (a promise from a POST request) 
} 

그리고 이것은 내 테스트 (사양) 파일입니다

//verify that the load function exists 
it('load snapshot',function(){ 

    expect(MyService.loadSomething(108)); //statement 1 
    spyOn(MyService, 'loadSomething').and.callThrough(); //statement 2 
}); 

그래서, SpyOn의 callthrough 방법은 실제 함수를 호출하는 것을 온라인으로 읽었다. 그러나 expect 문 (문 1)을 사용하여 테스트를 실행하면 console.info 메시지가 호출되어 제대로 작동합니다. 반면에 문 1을 주석 처리하고 SpyOn (주석 2)의 주석 처리를 제거하면 console.info 메시지가 더 이상 표시되지 않습니다.

나는 정확한 반대가 일어날 것으로 기대합니다. 여기에 뭔가 잘못 이해 한 적이 있습니까?

가 도움을 사전에 감사합니다 (나머지 코드는 사양 파일과 실제 서비스를 모두, 나는 정말이 특정 일을하지 않아도 잘 작동).

답변

0

SpyOn은 테스트에서 함수가 호출 될 때 반응하는 방식을 설정하는 데 도움이됩니다. 기본적으로 재 스민은 모의를 만드는 방법입니다.

서비스 기능이 호출 될 때 테스트가 수행해야 할 작업 (callThrough)을 정의했습니다. 문제는 당신이 또한 우리가 조롱 곳 다음은 간단한 테스트입니다

it('load snapshot',function(){ 

    //setup 
    spyOn(MyService, 'loadSomething').and.callThrough(); //statement 2 

    //act 

    //either call the scope function which uses the service 
    //$scope.yourServiceCallFunction(); 

    //or call the service function directly 
    MyService.loadSomething(1); //this will callThrough 

}); 

을 callThrough 것 SpyOn을 트리거 서비스 기능 (또는 서비스 메서드 호출 범위 기능) 순서 으로 행동 할 필요가있다 문자열에 대한 SpyOn의 응답

it('test loadSomething',function(){ 

    //setup 
    spyOn(MyService, 'loadSomething').and.returnValue('Mocked'); 

    //act 
    var val = MyService.loadSomething(1); 

    //check 
    expect(val).toEqual('Mocked'); 
});