2015-09-02 11 views
5

Muszę zastosować testowanie do konkretnego kontrolera.Jak przetestować funkcję poza zakresem, a to w AngularJS Unit Testing

Testowanie regulator jest ok:

angular.module('app', []).controller('PasswordController', function PasswordController($scope) { 
    $scope.password = ''; 

    $scope.grade = function() { 
     var size = $scope.password.length; 
     if (size > 8) { 
      $scope.strength = 'strong'; 
     } else if (size > 3) { 
      $scope.strength = 'medium'; 
     } else { 
      $scope.strength = 'weak'; 
     } 
    }; 
}); 

Ale chciałbym Test:

angular.module('app', []).controller('PasswordController', function PasswordController($scope) { 


    var vm = this; 
    vm.password = ''; 

    function grade() { 
     var size = vm.password.length; 
     if (size > 8) { 
      vm.strength = 'strong'; 
     } else if (size > 3) { 
      vm.strength = 'medium'; 
     } else { 
      vm.strength = 'weak'; 
     } 
    }; 
}); 

Próbowałem przetestować kontroler za pomocą poniższego kodu:

describe('Test', function() { 

    beforeEach(module('app')); 

    var MainCtrl, scope; 

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

    it('Should not throw Exception', function() { 
     scope.password = 'abc'; 
     var call = function() { 
      MainCtrl.grade(); 
     } 
     expect(call).not.toThrow(); 
    }); 
}); 

Ale dostaję ten błąd: Oczekiwana funkcja nie do rzucenia, ale rzucił TypeError: "undefined" is n dla funkcji (ocena "MainCtrl.grade()").

Ten stackOverflow Question pomóż mi zastosować testowanie do funkcjonowania w "tym". Ale chcę przetestować funkcje z zakresu $ i "to" ...

Dowolny pomysł jak zastosować testowanie jednostki do tego kontrolera?

Odpowiedz

1

Metoda oceny nie jest dołączona do kontrolera;

vm.grade = grade; 

Working Plunkr

+0

myślę, że PO celowo utrzymywane metody "prywatny". Upublicznienie go tylko w celu przetestowania go nie brzmi dobrze dla mnie. – alecxe

+0

Więc, nie mogę przetestować metody, która nie jest dołączona do kontrolera ??? –

+0

Jeśli chcesz przetestować go bezpośrednio, musi on w jakiś sposób zostać ujawniony. Jeśli zostanie wywołana z innej akcji z poziomu kontrolera, można to sprawdzić. Na przykład, jeśli masz watcher na vm.password, który wykonał metodę klasy, możesz zweryfikować, że właściwość strength jest taka, jaka powinna być po trawieniu. –

Powiązane problemy