[英]Difference between injecting $scope and $rootscope into unit test?
這總是讓我感到困惑,並且想知道在編寫單元測試時我們將使用什么,如何使用, 為什么使用以及何時使用。
var $rootScope;
beforeEach(inject(function(_$rootScope_) {
$rootScope = _$rootScope_;
}));
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
並創建子范圍。 $scope
但可以注入$rootScope
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.