参数' menuController'不是函数,单元测试时我的Angular控制器

时间:2016-02-04 15:48:17

标签: angularjs unit-testing

我在设置单元测试项目时遇到了问题。 第一次测试运行,但试图建立这个测试并不是。 消息是这个

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

在这一行(调试时)

> menuController = $controller('menuController', {
>             $scope: $scope,
>             appConfig: {}
>         });

这是我的测试代码:

/// <reference path="./../_references.js" />

(function () {
    'use strict';

    angular
        .module(Main.config.name)
        .controller('menuController', menuController);

    menuController.$inject = ['$state', 'appConfig'];

    function menuController($state, appConfig) {

    }

})();

(我删除了function menuController中的所有代码,因此它不会破坏控制器中的代码)

这是测试代码

/// <reference path="../../scripts/_references.js" /> 
'use-strict';

describe('menuController', function () {
    var menuController;
    var $scope;

    beforeEach(function () {
        module(Main.config.name);
    });

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

    menuController = $controller('menuController', {
            $scope: $scope,
            appConfig: {}
        });
    }));



    it('menuController should not be null', function () {
        expect(angular.isObject(menuController)).toBe(true);
        expect(menuController).not.toBe(null);
        expect(menuController).not.toBeUndefined();
    });

});

我已经运行了另一个控制器,但是那个没有依赖关系(还没有逻辑):

TEST homeController = $controller('homeController');

和CONTROLLER

/// <reference path="./../_references.js" />


    (function () {
        'use strict';

        angular
            .module(Main.config.name)
            .controller('homeController', homeController);

        function homeController() {

            /* jshint validthis:true */
            var vm = this;

            activate();

            function activate() { }
        }

    })();

修改

现在不太有意义...... 我创建了一个homeController的副本并将其命名为“zoekenController&#39;

在&#39; homeController&#39;测试这条线有效 homeController = $controller('homeController'); 但这给了我一个错误:var t = $controller('zoekenController');

相同的控制器(其他名称偏离课程)

编辑2 我在这个角度代码中出错:

 expression = controllers.hasOwnProperty(constructor)
            ? controllers[constructor]
            : getter(locals.$scope, constructor, true) ||
                (globals ? getter($window, constructor, true) : undefined);

变量controllers始终是&#39; homecontroller&#39;并且在zoekenController的测试期间,它是“家庭控制器”。因此它无法在homecontroller中找到zoekenController构造函数。 (在我的另一个项目中运行(但我似乎无法找出原因)controllers属性包含所有控制器。但这不是我自己做的事情,注册控制器....

编辑3: 我的语法是否正确? 我意识到这是我从另一个项目复制的测试代码,但我们对控制器有不同的语法:

.controller('reviewController', [
        '$scope',
        'settings',
        'reviewService',
        '_',
        function reviewControllerInit($scope,settings,reviewService,_){

            $scope.settings = settings;
            $scope.review = {
                scores : []
            };

0 个答案:

没有答案