控制器不是一个函数,在使用angular进行茉莉花测试时未定义(route - $ stateProvider)

时间:2015-08-05 05:44:41

标签: angularjs karma-jasmine angle

我正在为我的项目使用角度主题与Angular,我正在使用jasmine框架对此进行单元测试。但是当我运行测试用例时,它会出现" Argument' controller'不是一个功能,未定义"。这是我的test.js文件....

describe('registrationController',function(){
beforeEach(module('appTesting'));
var $controller;
beforeEach(inject(function(_$controller_){
    $controller = _$controller_;
}));
it('Check Working Or Not', function() {
    var $scope = {};
    var controller = $controller('registrationController', { $scope: $scope });
    $scope.password = 'passwordlength';
    $scope.grade();
    expect($scope.strength).toEqual('strong');
});

});

错误 -

Error: [ng:areq] Argument 'registrationController' is not a function, got undefined http://errors.angularjs.org/1.3.10/ng/areq?p0=registrationController&p1=not%20a%20function%2C%20got%20undefined

不,我正在使用业力来运行茉莉花。

我在这里定义我的模块

var App = angular.module('appTesting', ['ngRoute', 'ngAnimate', 'ngStorage', 'ngCookies', 'pascalprecht.translate', 'ui.bootstrap', 'ui.router', 'oc.lazyLoad', 'cfp.loadingBar', 'ngSanitize', 'ngResource'])
      .run(["$rootScope", "$state", "$stateParams",  '$window', '$templateCache', function ($rootScope, $state, $stateParams, $window, $templateCache, $location) {
          // Set reference to access them from any scope
          $rootScope.$state = $state;
          $rootScope.$stateParams = $stateParams;
          $rootScope.$storage = $window.localStorage;
        }
      ]);

App.config(['$stateProvider','$urlRouterProvider', '$controllerProvider', '$compileProvider', '$filterProvider', '$provide', '$ocLazyLoadProvider', 'APP_REQUIRES', 'RouteHelpersProvider',
function ($stateProvider, $urlRouterProvider, $controllerProvider, $compileProvider, $filterProvider, $provide, $ocLazyLoadProvider, appRequires, helper) {


 'use strict';
App.controller = $controllerProvider.register;
App.directive  = $compileProvider.directive;
 App.filter     = $filterProvider.register;


App.factory    = $provide.factory;

App.service    = $provide.service;
App.constant   = $provide.constant;
 App.value      = $provide.value;
 $stateProvider
.state('app.registrationState', {
    url: '/registration',
    title: 'Ragistration Page',
    templateUrl: helper.basepath('registrationPage.html'),
    resolve: helper.resolveFor('registrationController','angularFileUpload')
})
}])
.controller('NullController', function() {});
App.constant('APP_REQUIRES', { 
scripts: 
{
  'registrationController' :['app/js/registrationcontroller.js'],
}
});

3 个答案:

答案 0 :(得分:1)

可以找到控制器吗?

  • 你有一个名为registrationController的控制器吗?
  • 是否在名为appTesting的模块中?

您的应用中应该有以下代码:

angular.module("appTesting").controller("registrationController", ...);

如果您使用的是Karma-jasmine:

  • 您是否在registration-controller.js中包含了定义控制器(karma.conf.js)的文件?

karma.conf.js

module.exports = function(config) {config.set({
  files : [
    'src/registration-controller.js',
    ...
    ],
  ...
});};

茉莉

如果您不使用Karma运行Jasmine,我假设您正在使用Jasmine测试运行器(HTML文件)。在那种情况下:

  • 您是否在HTML文件中包含控制器?

您需要包含控制器的脚本:

<head>
  ...
  <script type="text/javascript" src="src/registration-controller.js"></script>
  ...
</head>

答案 1 :(得分:0)

由于定义了控制器的源代码错误,无法找到或未创建控制器。

在我的情况下,这是由于一个错误导致控制器未加载的错误导致控制器未加载。

答案 2 :(得分:0)

这可能由于各种原因而发生。

- &GT;控制器名称未被引用 - &GT;由于某些错误,未创建控制器。

就我而言,我的控制器名称在

中不匹配
directive:
.controller('IAddController', AddController)

Jasmine spec.ts:
// Instantiate controller
        addController= $controller<any>('AddController', {*