code: function (options) {
          // combine runner config and make a copy
          var runOptions = _.merge(_.omit(options, ['environment', 'globals', 'data']), this.options.run) || {};
  
          // start timeout sanitization
          !runOptions.timeout && (runOptions.timeout = {});
  
          _.mergeWith(runOptions.timeout, defaultTimeouts, function (userTimeout, defaultTimeout) {
              // non numbers, Infinity and missing values are set to default
              if (!_.isFinite(userTimeout)) { return defaultTimeout; }
  
              // 0 and negative numbers are set to Infinity, which only leaves positive numbers
              return userTimeout > 0 ? userTimeout : Infinity;
          });
  
          return runOptions;
      }
docs: Prepares `run` config by combining `runner` config with given run options.
  
  @param {Object} [options]
  @param {Object} [options.timeout]
  @param {Object} [options.timeout.global]
  @param {Object} [options.timeout.request]
  @param {Object} [options.timeout.script]