2016-07-26 150 views
0

我是一個絕對的noob在測試和幾十個教程沒有幫助。所以請和我一起裸照。AngularJS測試與Karma

可以請某人幫忙瞭解一些事情嗎?

我沒有問題在檢查函數是否定義時編寫測試,但我該如何更深入地檢查函數是否做正確的事情並返回它們假設的東西,如果幾乎所有的東西都獲得大量數據從數據庫和我的數額不能真正嘲笑整個數據集。我仍然用模擬功能檢查它嗎?

如果函數接受數據集作爲參數,我該如何模擬參數? 如何測試在其中使用更多功能的功能?

這裏的功能之一的代碼示例我無法弄清楚如何測試:

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> 

任何意見都非常appriciated。

回答

1

這是一個私人的功能它沒有連接到範圍

變化,其功能是

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

仍然得到完全相同的錯誤。我也嘗試將它作爲'vm.applyHourInputFilter = function(){vm.filteredHourInputs = vm.hourinputs.filter(hourInputFilter); \t \t \t sortArr(vm.filteredHourInputs); \t \t \t changeItemName() \t \t}' 沒有幫助。 –

相關問題