【问题标题】:Testing angular controllers that have many dependencies测试具有许多依赖项的角度控制器
【发布时间】:2016-07-24 12:10:16
【问题描述】:

我正在尝试测试控制器。

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

【问题讨论】:

  • “我必须拥有我添加的两个,这就是它们存在的原因”......对不起,我不确定我是否理解这个问题。你能说得清楚一点吗?
  • @GonzaloPincheiraArancibia - 我添加了更多细节。基本上在 beforeEach 中的 MyController 对象没有任何属性或功能。

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


【解决方案1】:

bMethod 不附加到 scopethisvariable,因此它在测试中不可用。在测试中添加方法有两种方式:

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

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

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

【讨论】:

    【解决方案2】:

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

    拥有aMethod属性的是scope对象,而不是MyController

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多