2017-12-18 10 views
1

나는 카르마와 재스민으로 테스트하는 Angular 1.6.6 어플리케이션이 있습니다.스파이 활동을 할 때 앵귤러 서비스가 정의되지 않음

는 컨트롤러에서이 코드를 감안할 때 : 나는 다음과 같은 사양으로 테스트 한

$scope.undo = function() { 
     return $scope.isUndoDisabled() || $scope.undoAction(); 
    }; 

    $scope.isUndoDisabled = function() { 
     return HistoryService.isUndoDisabled(); 
    }; 

:

it('undoAction should not be called with default settings', function() { 
     var $scope = {}; 
     var controller = $controller('PaintController', { $scope: $scope }); 

     spyOn($scope, 'undoAction'); 
     //spyOn(HistoryService, 'isUndoDisabled'); 

     $scope.undo(); 
     expect($scope.undoAction).not.toHaveBeenCalled(); 
    }); 

하고 테스트를 통과,하지만 난 HistoryService의 spyOn 주석을 제거 할 때 , HistoryService.isUndoDisabled()$scope.isUndoDisabled에서 반환하면 정의되지 않음이 반환되고 으로 인해 실패합니다.

예상되는 스파이 undoAction이 호출되지 않았습니다.

무슨 일이 벌어지고 있는지에 대한 아이디어가 있습니까? spyOn이 코드에 영향을주는 것 같습니다. ??

답변

2

spyOn(...)의 복귀가 안해야 바로 가기입니다 spyOn(...).and.stub()의 경우 spyOn(...).and.callThrough()이 아님. 이 방법으로 스파이웨어를 받으면 HistoryService.isUndoDisabled()undefined을 반환합니다.

장치를 테스트하는 적절한 방법은 다른 장치와 격리시키는 것입니다. 이 시험 컨트롤러 때문에, 서비스 나 스텁 조롱한다 :

spyOn(HistoryService, 'isUndoDisabled').and.returnValue(false); 
: 또 다른 테스트에서 다음

spyOn(HistoryService, 'isUndoDisabled').and.returnValue(true); 

1

난 당신이 HistoryService에서 isUndoDisabled()를 호출 할 경우 생각 함수 $ scope.isUndoDisabled이

$scope.isUndoDisabled = function() { 
    HistoryService.isUndoDisabled(); 
};