我有一个控制器,它包含一个命名函数。
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函数?
即
it('expect calling function', function(){
foo(data);
});
这给了我错误
答案 0 :(得分:2)
在控制器外调用foo
函数是不可能的,因为foo
是闭包 - 内部函数已定义且仅在控制器函数体内可用。
见https://developer.mozilla.org/cs/docs/Web/JavaScript/Closures#Lexical_scoping
我更喜欢控制器作为角度控制器的语法。 Controller是普通的对象构造函数,其属性和方法在此定义。 绑定到范围仅在评估ng-controller指令(或路由显示)期间出现。
通常,您可以在test,mock dependencies(waiting
)中创建控制器实例,并更容易使用spies进行断言函数调用。
http://toddmotto.com/digging-into-angulars-controller-as-syntax/