2016-11-21 11 views
0

私は拡張できる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]; 
}; 

答えて

1

変数のテスト/チェックには制限がありません。しかし、それがあなたの機能を読みにくくすると感じるなら、あなたはいつでも他の場所のパラメータ検査コードを取ることができます。

また、はるかに短い方法で書くことができます。たとえば、これは:

if(!parameters || parameters.method && typeof parameters.method !== 'string') { 
    throw Error('bad arguments'); 
} 

かさえ:

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'); 
    } 
} 

のように書くことができ

assert(!parameters || parameters.method && typeof parameters.method !== 'string'); 

それが今書かれている方法は非常に冗長です。

関連する問題