2016-07-26 102 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}' 没有帮助。 –

相关问题