测试/检查变量的限制是什么?

时间:2016-11-21 14:47:56

标签: javascript node.js unit-testing methodology

我有一个可以扩展的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 个答案:

答案 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');

现在写它的方式非常冗长。