Angularjs 当函数在角度上下文中运行时,如何意识到这一点?
假设我有一项服务:Angularjs 当函数在角度上下文中运行时,如何意识到这一点?,angularjs,Angularjs,假设我有一项服务: angular.module("app").factory("myService", function($rootScope){ return { doSomething: function(){ console.log('doingSomething', $rootScope.$$phase); $rootScope.someVar = true; } } }); 如果我像这样
angular.module("app").factory("myService", function($rootScope){
return {
doSomething: function(){
console.log('doingSomething', $rootScope.$$phase);
$rootScope.someVar = true;
}
}
});
如果我像这样在控制器中运行它
angular.module("app").controller("HomeController", function(myService){
myService.doSomething();
});
控制台日志提供:
doingSomething $apply
但是如果我在单元测试环境中运行服务
it('should doSomething', inject(function(myService) {
myService.doSomething();
}));
控制台日志仅获取
doingSomething null
如果需要通过$apply触发$digest循环,典型的答案是apply。angular js wiki关于ng click、$timeout和$http,但肯定还有其他地方,比如在控制器内部运行。如果没有反复试验,我如何确定这一点呢?这实际上取决于您测试的内容。如果您正在测试需要摘要周期的内容,如$broadcast或$on events,则需要在测试设置中调用scope.$apply或scope.$digest 然而,在大多数情况下,这并不是必需的,因为服务通常被设计为不需要范围的离散功能。对于HTTP调用,$httpBackend`服务允许您模拟响应 对于ng click,您不应该使用这是一项服务。对于控制器,您将绑定到一个可以单独测试的函数 希望这有帮助