测试 angular 个具有很多依赖项的控制器

Testing angular controllers that have many dependencies

我正在尝试测试控制器。

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,但它似乎没有正确创建我的控制器。

控制器实例上没有属性,因为它们未定义。

得到aMethod属性的是scope对象,不是MyController:

expect(scope.aMethod).toBe(jasmine.any(Function));

bMethod 它没有附加到 scope 也没有附加到 this 变量,因此它在测试中不可用。测试中添加方法有两种方式:

$scope.bMethod = bMethod; //Attached to scope
this.bMethod = bMethod; //Attached to controller

在您的描述块中,您打印 MyController。这是控制器的一个实例。如果你想获取示例中提供的 a 方法,打印 scope 你会看到 a 方法。

检查这个codepen --> http://codepen.io/gpincheiraa/pen/WwXGxV