我正在尝试测试控制器。
someModule.controller('MyController', function($rootScope, $scope, dep1, dep2) {
...
$scope.aMethod = function() {
...
}
function bMethod() {
...
}
...
}]);
我以这种方式定义我的测试:
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
console.log($controller);
MyController = $controller('MyController', {
$rootScope : $rootScope,
$scope: scope
});
console.log('Some debug message');
console.log(MyController);
}));
我得到了这个输出:
LOG: function (expression, locals, later, ident) { ... }
LOG: 'Some debug message'
LOG: {}
即使我放入dep1
和dep2
,我也会得到相同的结果。因此scope
和rootScope
必须存在,否则我在运行时会收到错误。
我不确定为什么这不起作用,因为最后一个输出为空,所以控制器中没有任何功能,这是错误的。
我想至少测试bMethod
,但似乎没有正确创建我的控制器。
答案 0 :(得分:1)
控制器实例上没有属性,因为它们没有定义。
scope
对象有[{1}}属性,而不是aMethod
:
MyController
答案 1 :(得分:1)
bMethod
它没有附加到scope
,也没有附加到this
变量,因此它在测试中不可用。在测试中添加方法有两种方法:
$scope.bMethod = bMethod; //Attached to scope
this.bMethod = bMethod; //Attached to controller
在您的描述块中,您打印MyController
。这是控制器的一个实例。如果你想获得示例中提供的方法,请打印scope
,然后你会看到一个方法。
检查此codepen - > http://codepen.io/gpincheiraa/pen/WwXGxV