2016-07-26 2 views
0

저는 테스트에서 절대적인 멍청이이고 수십 개의 튜토리얼로 도움을받지 못했습니다. 그러니 제발 내게 맡겨주십시오.카르마로 AngularJS 테스트하기

누군가가 몇 가지 사항을 이해할 수 있도록 도와 주시겠습니까?

함수가 정의되어 있는지 확인하는 데 문제가 없지만 함수가 올바른 작업을 수행하고 있다고 가정하고 반환하는 방법을 확인하려면 어떻게해야합니까? DB와 나는 데이터 세트 전체를 조롱 할 수 없다. 나는 mockfunction으로 어떻게 든 그것을 여전히 체크하고 있는가?

데이터 집합을 인수로 받아들이는 경우 함수에 대한 인수를 모의 어떻게해야합니까? 내부에 몇 가지 더 많은 기능을 사용하는 함수를 테스트하려면 어떻게합니까? 여기

내가 테스트하는 방법을 알아낼 수 없습니다 기능 중 하나의 코드 예제 :

angular.module('app').controller(controllerId, ['$scope', hourinput]); 

function hourinput($scope) { 

    vm.changeWeek = function (count) { 
        if (count > 0) { 
         vm.selectedDate = moment(vm.selectedDate).add(count, 'weeks'); 
        } else { 
         vm.selectedDate = moment(vm.selectedDate).subtract(-count, 'weeks'); 
        } 
        vm.selectedWeek = moment(vm.selectedDate).isoWeek(); 
        if (vm.selectedWeek != vm.previousSelectedWeek || vm.selectedYear != vm.previousSelectedYear) { 
         vm.previousSelectedWeek = vm.selectedWeek; 
         vm.previousSelectedYear = vm.selectedYear; 
         vm.selectedYear = moment(vm.selectedDate).isoWeekYear(); 
         vm.prevWeek = moment(vm.selectedDate).subtract(1, 'weeks').isoWeek(); 
         vm.nextWeek = moment(vm.selectedDate).add(1, 'weeks').isoWeek(); 
         vm.editingMode = -1; 
         if (count == -1) { 
          getHourInput(moment(vm.selectedDate).startOf('isoWeek').subtract(-count, 'weeks'), moment(vm.selectedDate).startOf('isoWeek').subtract(1, 'days')); 
         } else if (count == 1) { 
          getHourInput(moment(vm.selectedDate).startOf('isoWeek').add(count, 'weeks'), moment(vm.selectedDate).startOf('isoWeek').add(+count + 1, 'weeks').subtract(1, 'days')); 
         } else { 
          getHourInput(); 
         } 
        } 
        applyHourInputFilter() 
       }; 


    function applyHourInputFilter() { 
      vm.filteredHourInputs = vm.hourinputs.filter(hourInputFilter); 
      sortArr(vm.filteredHourInputs); 
      changeItemName() 
     } 
} 

을 그리고 여기에 오류가 있습니다 내 테스트입니다 : 내가 가진

describe('app module', function() 
{ 
    beforeEach(module('app')); 
    describe('Testing HI Controller', function(){ 
    var ctrl; 
    var scope; 

    beforeEach(inject(function ($rootScope, $controller) { 
      scope = $rootScope.$new(); 
      ctrl = $controller('hourinput', { $scope: scope }); 
     })); 


     it('should spyOn changeWeek call through', function() 
     { 
      spyOn(scope, 'applyHourInputFilter').and.callThrough(); 
      ctrl.changeWeek(1); 
      expect(scope.applyHourInputFilter).toHaveBeenCalled(); 
     }); 

     }); 
}); 

출력입니다 :

Test Outcome: Failed 
Result Message: Error: applyHourInputFilter() method does not exist 
Result StandardError: Error: applyHourInputFilter() method does not exist 
    at Object.<anonymous> 

모든 조언이 많이 있습니다.

답변

1

는 아직 정확히 같은 오류가

$scope.applyHourInputFilter=function() { 
vm.filteredHourInputs = vm.hourinputs.filter(hourInputFilter); 
     sortArr(vm.filteredHourInputs); 
     changeItemName() 
    } 
+0

에 기능이

변화 범위에 연결되지 않은 것 전용 기능입니다. 또한 vm.applyHourInputFilter = function() { \t \t \t vm.filteredHourInputs = vm.hourinputs.filter (hourInputFilter);로 컨트롤러에 연결하려고했습니다. \t \t \t sortArr (vm.filteredHourInputs); \t \t \t changeItemName() \t \t} 도움이되지 않았습니다. –

관련 문제