use*_*178 15 unit-testing jasmine
我正在开发一个大量使用JavaScript的应用程序.我需要对这段代码进行单元测试.为了做到这一点,我依靠Jasmine.
我的一些JavaScript代码会抛出JavaScript Error对象.这些对象将值分配给Error对象的message和name属性.我为name属性分配了一种异常.例如,有时名称设置为"OutOfRangeException",有时设置为"ArgumentException"等.
如何在Jasmine框架中使用toThrowError函数来测试抛出的错误是否具有特定名称?目前,我的JavaScript如下所示:
function getRandomNumber(max) {
if ((!isNaN(parseFloat(max)) && isFinite(max)) === false) {
var error = new Error('You must provide a number');
error.name = 'ArgumentException';
throw error;
}
if ((max === null) || (max < 1) || (max > 100)) {
var error = new Error('The maximum value must be greater than 0 and less than 100.');
error.name = 'ArgumentOutOfRangeException';
throw error;
}
return Math.floor(Math.random() * max) + 1;
}
function ArgumentException(message) {
this.name = 'ArgumentException';
this.message = message || '';
}
ArgumentException.prototype = new Error();
ArgumentException.prototype.constructor = ArgumentException;
Run Code Online (Sandbox Code Playgroud)
如何编写检查ArgumentException错误或ArgumentOutOfRangeException错误的Jasmine测试?
谢谢!
use*_*143 36
在jasmine中不支持使用参数检查函数的异常.但您可以使用以下解决方法来克服此限制并测试您的功能.
describe('toThrowError test case', function() {
it('test getRandomNumber function for undefined', function() {
expect(function() {
getRandomNumber(undefined);
}).toThrowError("You must provide a number");
});
it('test getRandomNumber function for 0', function() {
expect(function() {
getRandomNumber(0);
}).toThrowError("The maximum value must be greater than 0 and less than 100.");
});
});
Run Code Online (Sandbox Code Playgroud)
toThrowError matcher需要1或2个参数
基于异常类型检查的示例:
function getRandomNumber(max) {
throw new SyntaxError();
}
describe('toThrowError test case', function() {
it('test getRandomNumber function for undefined', function() {
expect(function() {
getRandomNumber(undefined);
}).toThrowError(SyntaxError);
});
});
Run Code Online (Sandbox Code Playgroud)
请参阅链接以了解不同类型的异常.
自定义错误消息
下面提到的代码段提供了使用自定义错误消息的示例.
function getRandomNumber(max) {
throw new ArgumentException();
}
function ArgumentException(message) {
this.name = 'ArgumentException';
this.message = message || '';
}
ArgumentException.prototype = new Error();
ArgumentException.prototype.constructor = ArgumentException;
describe('toThrowError test case', function() {
it('test getRandomNumber function for undefined', function() {
expect(function() {
getRandomNumber(undefined);
}).toThrowError(ArgumentException);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13587 次 |
| 最近记录: |