2014-01-20 7 views
8

ディレクティブ(隔離されたスコープ、トランスコード、置き換えられた)は、<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>を作成します。だから、同じIDを持つ複数の<div>をDOMに追加すると、角度に問題があるようです。これを修正した後、すべて期待通りに機能しました。

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

指令自体を見ずに検出することは不可能でした。次にディレクティブテストに関する質問を投稿するときには、必ずディレクティブコードを追加してください。 –

+1

'scope。$ apply();'を省略することができます。 –

関連する問題