参数'controllerLogin'不是函数,未定义 - AngularJs,Karma Testing

时间:2014-09-18 03:36:07

标签: javascript angularjs webstorm karma-jasmine

天才开发者你好,

目前我正在学习AngularJs并进行一些基本的测试,但不断出现错误。 请帮我解决这个问题。我四处寻找答案,却找不到任何答案。非常感谢您的任何帮助。

以下是错误。

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

我正在使用WebStrom IDE。

这是我的controllerLogin.js

'使用严格的';

var loginApp = angular.module('loginApp',[]);

(function() {

    //define this for the minification of javascripts
    var loginScope=['$scope'];
    var loginController = function($scope){
        $scope.hello = "Hello Galaxy";

    };

    loginController.$inject = loginScope;
    angular.module('loginApp').controller('loginController',loginController);

}());

以下是我的loginSpec.js

'use strict';

describe("app module", function () {

    beforeEach(module("loginApp"));

    describe("controllerLogin", function () {
        var scope,
            controller;

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

        it("should assign message to hello world", function () {
            controller("controllerLogin", {$scope: scope});
            expect(scope.message).toBe("Hello Galaxy");
        });
    });
});

以下是我的galaxytest.conf.js

 // list of files / patterns to load in the browser
    files: [
        'public/scripts/angular.js',
        'public/scripts/angular-mocks.js',
        'public/src/app/*.js',
        'public/app.js',
        '**/*.js',
        'test/**/*Spec.js'
    ],

以下是我的app.js

//Define all the module with no dependencies.
angular.module('loginApp',[]);


//Now Define Main Module of the Application
var galaxyFrontendApp = angular.module('galaxyFrontendApp',['ngRoute','ui.bootstrap','loginApp']);



galaxyFrontendApp.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/login', {templateUrl: 'src/app/modules/login/views/viewLogin.html', action: 'loginApp.loginController'});
  $routeProvider.otherwise({redirectTo: '/login'});
}]);

以下是我的index.js

<body>
        <div ng-view></div>



        <!-- Please refer all the javascript files here -->
        <!-- All the JS files from scripts folder -->
        <script src="scripts/angular.js"></script>
        <script src="scripts/angular-route.js"></script>
        <script src="scripts/ui-bootstrap.js"></script>
        <script src="app.js"></script>

        <!-- All the JS files from App folder -->
        <!-- Module Name - login -->
        <script src="src/app/modules/login/controllerLogin.js"></script>
        <script src="src/app/modules/login/directiveLogin.js"></script>




    </body>

请指导我完成这个。感谢您的时间和精力。

2 个答案:

答案 0 :(得分:3)

最后我得到了@DanWahlin的帮助,他发现了问题。这是我的galaxytest.conf.js文件。

   files: [
       "public/scripts/angular.js",
       "public/scripts/angular-mocks.js",
       "public/scripts/ui-bootstrap.js",
       "public/scripts/angular-route.js",
       "public/app.js",
       "public/src/app/modules/login/controllerLogin.js",
       "public/test/*Spec.js"
    ],

谢谢开发人员

答案 1 :(得分:0)

您不应在提供给操作的值中包含模块名称。该模块已加载,其所有控制器都在共享命名空间中。

action: 'loginController'