docs: function buildMockAttribute (val) {
      // if value is not a function then this is a property not a method
      // if value is a regular function then it is a custom method
      if (typeof val !== 'function' || val.toString().match(/^\s*function/)) {
          return val
      }
      // if value is an arrow function then the value return by this function
      // is the value to be returned by the mock method
      else {
          // get actual value by calling function
          val = val()
          // if value is anything other than array then convert it to first element
          // of single element array so that it will always be returned when the
          // method is called
          if (!Array.isArray(val)) {
              val = [val]
          }
          // counter to keep track of how many times method has been called
          var callIndex = 0
          // return new method for object
          return function () {
              // loop through list of values on multiple calls
              if (callIndex > val.length - 1) {
                  callIndex = 0
              }
              // get the next value and increment index
              var ret = val[callIndex++]
              // if value is a plain function or not a function then return it
              if (typeof ret !== 'function' || ret.toString().match(/^\s*function/)) {
                  return ret
              }
              // otherwise val is an arrow function - call with original args
              else {
                  return ret.apply(this, arguments)
              }
          }
      }
  }