0

我有一个控制器,其中包含一个命名函数。

function controller($scope, ...){
   function foo(data){ 
     //logic for other stuff
     $log(data);
 }

 //some promise stuff
waiting.then(function(data){
  foo(data);
});

对于函数可用的方式,我不想将 foo 分配给范围变量,因为这样做:

$scope.foo = function(data) {}

被皱眉?(不确定......但由于我没有从视图中调用 foo,我不明白我为什么会这样做)

我的问题是,如何从单元测试“it”块中调用 foo 函数?

IE

  it('expect calling function', function(){
    foo(data);
});

这给了我错误

4

1 回答 1

2

调用foo控制器外部的函数是不可能的,因为foo闭包 - 内部函数已定义且仅在控制器函数体内可用。请参阅https://developer.mozilla.org/cs/docs/Web/JavaScript/Closures#Lexical_scoping

我更喜欢角​​度控制器的 controllerAs 语法。Controller 是一个普通的对象构造器,其属性和方法都定义在它上面。绑定到范围仅在评估 ng-controller 指令(或路由显示)期间出现。

通常,您可以在测试中创建控制器实例,模拟依赖项(waiting)并更轻松地使用间谍进行断言函数调用。

http://toddmotto.com/digging-into-angulars-controller-as-syntax/

于 2015-07-14T20:45:43.020 回答