2015-02-03 5 views
0

Я следую Угловому руководству по модулю тестирования контроллера. Я использую Karma и Jasmine для тестирования. Когда я запускаю тест, я получаюБлок Тестирование контроллера в Angular.js

Error: [ng:areq] Argument 'testController' is not a function, got undefined 

Любые идеи о том, как я могу загрузить testController в test.js? Код ниже. Благодаря!

<!-- app.js --> 

var simulatorApp = angular.module('simulatorApp', ['ngRoute', 'ngResource', 'ngCookies'], 

simulatorApp.config(['$routeProvider', function($routeProvider) { 
    $routeProvider 
     .when('/', {templateUrl: '/angular/views/home.html', controller: homeController}) 
     .when('/test', {templateUrl: '/angular/views/test.html', controller: testController}) 
     .otherwise({redirectTo: '/'}); 
}]); 

<!-- testController.js --> 

function testController($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'; 
     } 
    }; 
} 

<!-- test.js --> 
describe('testController', function() { 
    beforeEach(module('simulatorApp')); 

    var $controller; 

    beforeEach(inject(function (_$controller_) { 
     // The injector unwraps the underscores (_) from around the parameter names when matching 
     $controller = _$controller_; 
    })); 

    describe('$scope.grade', function() { 
     it('sets the strength to "strong" if the password length is >8 chars', function() { 
      var $scope = {}; 
      var controller = $controller('testController', {$scope: $scope}); 
      $scope.password = 'longerthaneightchars'; 
      $scope.grade(); 
      expect($scope.strength).toEqual('strong'); 
     }); 
    }); 
}) 

ответ

1

Вот рабочий plunkr.

Поскольку Narek Mamikonyan ответил, что вы не зарегистрировали свой контроллер на своем модуле.

simulatorApp.controller('testController', testController); 

function testController($scope) { 
    ... 
}; 

Такая же проблема, вероятно, с homeController

simulatorApp.controller('homeController', homeController); 

function homeController($scope) { 
    ... 
}; 

Кроме того, вы должны попробовать и объявить ваш контроллер что-то вроде этого, так как это не взорвется, если у вас есть минификация ваших файлов JavaScript

simulatorApp.controller('testController', ['$scope', testController]); 

Если вы этого не сделаете, $ scope не будет таким же, как только он был изменен, и ваше приложение не будет работать.

0

вы не определили свой контроллер в модуле

simulatorApp.controller('testController', function testController($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'; 
     } 
    }; 
}) 
+0

Понял, мне нужно было указать мой контроллер как строку в $ routeProvider. Благодаря! –

Смежные вопросы