测试具有许多依赖关系的角度控制器

时间:2016-04-04 19:33:38

标签: angularjs unit-testing dependency-injection karma-jasmine

我正在尝试测试控制器。

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: {}

即使我放入dep1dep2,我也会得到相同的结果。因此scoperootScope必须存在,否则我在运行时会收到错误。

我不确定为什么这不起作用,因为最后一个输出为空,所以控制器中没有任何功能,这是错误的。

我想至少测试bMethod,但似乎没有正确创建我的控制器。

2 个答案:

答案 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