Angularjs 为什么在单元测试中在$compile(element)(scope)之后调用scope.$digest()
以下是用于测试指令的非常常见的通用场景:Angularjs 为什么在单元测试中在$compile(element)(scope)之后调用scope.$digest(),angularjs,jasmine,Angularjs,Jasmine,以下是用于测试指令的非常常见的通用场景: var element,scope; beforeEach(inject(function ($rootScope,$compile) { scope = $rootScope.$new() element = angular.element('<div my-directive></div>') $compile(element)(scope) scope.$digest(); //why? })) var元
var element,scope;
beforeEach(inject(function ($rootScope,$compile) {
scope = $rootScope.$new()
element = angular.element('<div my-directive></div>')
$compile(element)(scope)
scope.$digest(); //why?
}))
var元素、范围;
beforeach(注入(函数($rootScope,$compile){
scope=$rootScope.$new()
元素=角度。元素(“”)
$compile(元素)(范围)
scope.$digest();//为什么?
}))
我理解
$compile(element)
返回一个函数,该函数接受范围参数并将其提供给元素的指令。我还了解,scope.$digest()
执行摘要循环并开始脏检查。话虽如此,我的问题是为什么在调用$compile
之后必须调用作用域。$digest
,以使一切都在这种情况下工作 这是测试指令的通用代码$Compile
将模板与作用域绑定,并执行链接
函数和$digest
/$apply
刷新可能已被链接
修改的模型的绑定在
ng单击处理程序或控制器函数中调用$compile
时,整个执行在$digest
循环中运行。Angular以这样一种方式构建,即动态添加的项(在执行此循环时)在同一个周期中执行。这就是为什么您实际上没有注意到差异,也没有意识到编译后绑定求值的必要性。然而,在单元测试中情况就不同了,在单元测试中,您应该告诉angular手动执行$digest
循环。例如,在测试$q
承诺时,这通常会导致问题