2014-01-20 54 views
8

該指令(隔離範圍,transcluded,替換)在<body>中插入一個掩碼。

var mask = angular.element('<div id="mask"></div>'); 

$document.find('body').append(mask); 

scope.$on('$destroy', function() { 
    mask.remove(); 
}); 

我試圖與範圍的一個簡單的廣播來測試這種情況下:

var $document, scope, element, rootScope; 

beforeEach(inject(function($compile, _$document_, $rootScope, $injector) { 
    rootScope = $injector.get('$rootScope'); 
    scope = $rootScope; 
    $document = _$document_; 
    mask = $document.find('#mask'); 
    element = $compile(angular.element('<overlay id="derp"></overlay>'))(scope); 
})); 

it('should remove mask when casting the $destory event', function (done) { 
    scope.$broadcast('$destroy'); 
    scope.$digest(); 
    expect($document.find('#mask').length).toBe(0); 
}); 

知道爲什麼這不起作用?

+0

你可以顯示指令和整個規格嗎? –

+0

增加了更多細節。 – mrzmyr

+0

產生相同的結果。 – mrzmyr

回答

5

錯誤在於:該指令爲多重疊加創建了多個<div id="mask"></div>倍數。因此,在向DOM添加具有相同ID的多個<div>時,角度似乎有問題。解決這個問題後,所有工作都按預期進行

it('should remove mask when $destoryed', function() { 
    scope.$destroy(); 
    expect($document.find('#mask').length).toBe(0); 
}); 
+0

沒有看到指令本身就無法檢測到它。下次您發佈有關指令測試的問題時,請務必發佈更多的指令代碼。 –

+1

您可以省略'scope。$ apply();' –