如何單元測試的$摧毀angularjs一個指令的事件?如何測試的破壞範圍
我的代碼在我的指令:
scope.$on('$destroy', function() {
//clean something
});
我的測試代碼:
it('on destroy',function(){
scope.$destroy();
scope.$digest();
//expect everything done?
});
任何建議!
如何單元測試的$摧毀angularjs一個指令的事件?如何測試的破壞範圍
我的代碼在我的指令:
scope.$on('$destroy', function() {
//clean something
});
我的測試代碼:
it('on destroy',function(){
scope.$destroy();
scope.$digest();
//expect everything done?
});
任何建議!
您可以選擇從你的指令模板的DOM,並得到了它的範圍,然後運行$ destroy()方法。
例:
您的TPL:
"<div id='tuna'></div>"
測試:
it('test on destroy', function(){
var isolateScope = $(element).find('#tuna').eq(0).scope();
isolateScope.$destroy();
})
希望幫助你!
您應該測試是$destroy
事件中執行的代碼。下面是使用的控制器的人爲的例子:
測試
it('sets destroyed to true when the scope is destroyed', function() {
// Arrange
$scope.destroyed = false;
// Act
$scope.$destroy();
// Assert
expect($scope.destroyed).toBe(true);
});
控制器
app.controller('MainCtrl', function($scope) {
$scope.$on('$destroy', function() {
$scope.destroyed = true;
});
});
Plunker here。
喜邁克爾!我認爲你的解決方案適用於控制器的範圍。我想在一個指令中測試$銷燬範圍。謝謝! –
我認爲這是指令的相同解決方案。你能用你的代碼創建一個Plunker腳本嗎? –
這很實用。我很好奇,如果有任何內置的布爾標誌來檢查狀態。換句話說,AngularJS本身只會通過檢查特定的布爾標誌來銷燬一次作用域? – stanleyxu2005
角的isolateScope
優選使用jQuery。你可能已經編制的beforeEach元素測試上面是這樣的:
myEl = '<div my-el>MY EL</div>';
scope = $rootScope.$new();
directiveElement = $compile(myEl)(scope);
scope.$digest();
現在,在您的測試,你可以訪問isolateScope
並調用$destroy
:
var isolated = directiveElement.isolateScope();
isolated.$destroy();
這裏是我做的:
var destroyed = spyOn(scope, '$destroy').and.callThrough();
scope.$destroy();
expect(destroyed).toHaveBeenCalled();
不像其他的答案,我沒有創建標誌變量纔有意義進行測試,人所以,使用Jasmine spyOn和callThrough來檢查函數$ destry是否被成功調用會更有意義。
我明白了!謝謝。 –
歡迎您! –