以角度测试控制器内的功能

时间:2014-06-19 15:30:56

标签: angularjs jasmine

我正在尝试测试我的Angular控制器中是否调用了某个特定函数。

.controller('demo',function(){

  function init(){
     //some code..
  }

  init();
}

我的测试代码如下所示:

describe(..

  beforeEach(...
   function createController() { /*call this fn to create controller */
   )

  describe('controller initilization'.function(){
     var spy = spyOn(this,init)
     createController();  
     expect(spy).toHaveBeenCalled();
   }

)
当然,上述单元测试失败了。那么我如何检查函数init()是否被调用?

1 个答案:

答案 0 :(得分:1)

你写的代码不是“间谍”。 所以要么不要监视init,要么只模仿控制器协作者。

你在Java中编写了一个私有方法的等价物。使其公开或使该方法属于协作者。

将init移动到服务中,如果需要,将$ scope作为参数传递。

module.service('Init',function(){
    this.init=function($scope){};
})
.controller('Ctrl',function($scope,Init){
       Init.init($scope);
})

然后

$scope=$rootScope.new();
Init=$injector.get('Init');
spyOn(Init,'init');
Ctrl=$controller('Ctrl',{$scope:$scope});


expect(Init.init).toHaveBeenCalledWith($scope);