我有一个可以扩展的javascript类。
当我编写单元测试时,我看到了我能捕捉到的错误
所以我在第一个函数 extractParameterMethodForRequest 中添加了检查类属性的测试。
但是现在当我读到我的功能时,会有很多噪音。
你觉得这样检查是否有用?也许我必须合并一些异常来提供一般性错误?
function MyClass(){
this.validHttpMethods = ['GET', 'POST'];
this.defaultValues = {
method: 'GET'
};
}
/**
* Extract "method" from parameters
* @param {MyClass~RawParameters} parameters
* @return {string} A validate Methods belong to validHttpMethods
*/
MyClass.prototype.extractParameterMethodForRequest = function (parameters) {
var idx;
var method;
if(parameters === undefined || parameters === null) {
throw Error('REQ-001 parameters undefined');
}
if(parameters.method) {
if(typeof parameters.method !== 'string') {
throw Error('REQ-002 method not a string');
}
method = parameters.method;
}
else {
if(this.defaultValues === undefined) {
throw Error('REQ-003 this.defaultValues undefined');
}
if(this.defaultValues.method === undefined) {
throw Error('REQ-004 default method undefined');
}
if(typeof this.defaultValues.method !== 'string') {
throw Error('REQ-005 default method not a string');
}
method = this.defaultValues.method;
}
method = method.trim().toUpperCase();
if(method.length < 1) {
throw this.RError('REQ-006 method empty');
}
if(this.validHttpMethods === undefined) {
throw this.RError('REQ-007 this.validHttpMethods undefined');
}
if(!(this.validHttpMethods instanceof Array)) {
throw this.RError('REQ-008 this.validHttpMethods not an array');
}
idx = this.validHttpMethods.indexOf(method);
if(idx === -1) {
throw this.RError('REQ-009 method %s invalid', method);
}
return this.validHttpMethods[idx];
};
答案 0 :(得分:1)
测试/检查变量没有限制。但如果您认为它使您的函数可读性降低,那么您始终可以在其他地方使用参数检查代码。
此外,您可以用更短的方式编写它。例如:
if(parameters === undefined || parameters === null) {
throw Error('REQ-001 parameters undefined');
}
if(parameters.method) {
if(typeof parameters.method !== 'string') {
throw Error('REQ-002 method not a string');
}
}
可以写成:
if(!parameters || parameters.method && typeof parameters.method !== 'string') {
throw Error('bad arguments');
}
甚至:
assert(!parameters || parameters.method && typeof parameters.method !== 'string');
现在写它的方式非常冗长。