0
我有一个按以下方式定义的控制器,它的工作原理非常完美。但是,当我尝试测试该控制器它说,“(控制器名称)”不是一个函数,得到了不确定的”。如何测试这种方法定义控制器。如何测试在angularjs中通过module.config创建的控制器
controller.js
var mainModule = angular.module('module1');
function home($scope) {
$scope.test = "hello";
}
home.$inject = ["$scope"];
mainModule.config(['$routeProvider',
function ($routeProvider) {
$routeProvider.when('/', {
templateUrl: 'partials/home.html',
controller: home
});
}
]);
testSpec.js
describe("Test home controller", function() {
beforeEach(module('module1'));
it("test the controller ", inject(function ($rootScope, $controller) {
var ctrl = $controller("home", {
$scope: $rootScope
});
expect($rootScope.items.length).toBe(3);
}));
});
您大概可以使用['$ injector.instantiate'](http://docs.angularjs.org/api/auto/service/$injector)创建一个新的'home'控制器实例。但是,你有什么理由在全球范围内创建控制器? [官方文档](http://docs.angularjs.org/guide/controller)显然不鼓励(检查第一个注释)。 –
没有它在全球范围内,我有很多模块,它像每个模块的基础。你能否详细说明或指出我如何使用$ injector.instantiate – SpreeTheGr8
在你发布的代码中,'home'是在全局范围内声明的。你的代码应该已经可以工作了,因为['$ controller'](http://docs.angularjs.org/api/ng/service/$controller)服务检查全局窗口对象上的'window [constructor]'。但显然'window ['home']'是'undefined'。 –