我需要測試一個指令,它應該拋出一個異常。我如何測試在茉莉花中引發異常?如何測試在AngularJS中引發異常
的指令鏈接功能:
link: function() {
if(something) {
throw new TypeError('Error message');
}
}
我還沒有成功地實施了測試,實際上捕獲錯誤並報告說,測試成功。
我需要測試一個指令,它應該拋出一個異常。我如何測試在茉莉花中引發異常?如何測試在AngularJS中引發異常
的指令鏈接功能:
link: function() {
if(something) {
throw new TypeError('Error message');
}
}
我還沒有成功地實施了測試,實際上捕獲錯誤並報告說,測試成功。
這是我要做的事:
describe("myDirective", function() {
it("should throw an error", inject(function ($compile, $rootScope) {
function errorFunctionWrapper()
{
$compile(angular.element("<div my-directive></div>"))($rootScope);
}
expect(errorFunctionWrapper).toThrow();
}));
});
it("should throw an error", inject(function ($compile, $rootScope) {
expect(function() {
$compile(angular.element("<directive-name></directive-name>"))($rootScope.$new());
}).toThrow();
}));
使用匿名函數是更優雅的解決方案IMO – 2015-09-23 21:32:27
編輯:這似乎是現在的固定。使用Angular 1.6.4進行測試。
在角1.6,我一直無法趕上在$compile
階段引發的錯誤。雖然不優雅,我仍然可以檢查對$exceptionHandler.errors
陣列(source):
it('throws an error', function() {
$compile(angular.element('<directive-name></directive-name>'))($rootScope.$new());
expect($exceptionHandler.errors.length).toBeGreaterThan(0);
});
更妙的是,它提供確切的錯誤消息(S):
expect($exceptionHandler.errors).toEqual(['first error', 'second error'])
異常處理在角度測試中更好地使用原生角度服務完成
https://docs.angularjs.org/api/ng/service/$exceptionHandler
這可以更好地處理拋出的異常,並提供更好的原生方式來處理全局異常。比如說在某個時間點,你可以在一個地方改變你的應用程序的異常處理策略。
在測試此與$ exceptionHandlerProviderhttps://docs.angularjs.org/api/ngMock/provider/$exceptionHandlerProvider
給你上發生的例外更好地處理和寫入特定的測試一起使用時
。
單元測試它不是一個角度標準的方法來驗證使用.toThrow()的異常;茉莉花的方法。
謝謝,解決了! – 2013-03-11 22:27:25