我需要测试一个指令,它应该抛出一个异常。我如何测试在茉莉花中引发异常?如何测试在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