2016-07-26 8 views
0

私はテストでは全くnoobであり、数十のチュートリアルは助けていません。だから私と一緒に裸にしてください。カルマによるAngularJSテスト

いくつかのことを理解してもらえますか?

関数が定義されているかどうかを調べる上でテストを書くのに問題はありませんが、関数が正しいことをしているかどうかをチェックして、 DBからの量と私は本当にデータセット全体を模倣することはできません。私はまだモック機能で何とかそれをチェックしていますか?

データセットを引数として受け入れる場合、関数の引数をどのように嘲笑しますか? 内部に2つ以上の関数を使用する関数をテストするにはどうすればよいですか?ここで

は、私がどのようにテストすることを見つけ出すことはできません機能の一つのコード例です:

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} 役に立たなかった –

関連する問題