簡體   English   中英

將$ scope和$ rootscope注入單元測試之間的區別?

[英]Difference between injecting $scope and $rootscope into unit test?

這總是讓我感到困惑,並且想知道在編寫單元測試我們將使用什么,如何使用, 為什么使用以及何時使用。

var $rootScope;
beforeEach(inject(function(_$rootScope_) {
  $rootScope = _$rootScope_;
}));

VS

var $scope;
beforeEach(inject(function(_$scope_) {
  $scope= _$scope_;
}));

第二種方法將是失敗的 您不能注入$scope因為在注入器中不存在$scope服務(與$ rootScope提供者相對)。 如果需要從rootScope創建子范圍,則注入$ rootScope並執行$scope = $rootScope.$new()

例:-

var $rootScope, $scope, $isolatedScope;
beforeEach(inject(function(_$rootScope_) {
  $rootScope = _$rootScope_;
  $scope = _$rootScope_.$new(); //inherited scope
  $isolatedScope =  _$rootScope_.$new(true) //isolated scope
}));

//   .....

beforeEach(function(){
  $controller('myControllThatUsesScope', {$scope:$scope});      
});

$scope通常是動態的或特殊的依賴項,它被注入到角度實體(如控制器,指令鏈接函數)。 這就是為什么當您使用$controller Service實例化一個控制器(對$ scope有依賴關系)時,您需要在本地顯式提供$scope而不是注入器中可用的其他依賴關系(如服務)的確切原因。同樣,您需要使用$rootScope來訪問服務內部的范圍方法,例如事件api。

為了更具體地說明您的問題:

  • 什么-必要時注入$rootScope並創建子范圍。
  • 方法-在有關如何注入rootscope的答案中已經提到。
  • 為什么-答案中提到為什么不能注入$scope但可以注入$rootScope
  • 何時-每當需要范圍對象時,是否提供它以實例化控制器,測試2向綁定指令,手動應用以調用摘要循環(您也可以只使用$ rootScope)等...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM