我在设置单元测试项目时遇到了问题。 第一次测试运行,但试图建立这个测试并不是。 消息是这个
[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 : []
};