#### Summary

When using nock and axios on the server side (node environment) to mock requests and responses, I ran into an interesting issue when I have axios configured with a timeout value.

If nock is not configured for a particular request, it throws an error: `Error: Nock: No match for request`.
If axios does NOT have a timeout value set, no thread is left open and hanging and the test suite closes as normal. 
If a timeout value IS set, axios waits the entire duration of the timeout before closing. Whats weird is the promise axios returns is rejected by nock (which is how I found that error above) so I have no idea why axios stays open for the full timeout.

The issue is in test runners (specifically Jest) will remain open until all threads are done. With axios hanging open here, our test times ballooned without any visible reason and it took me several hours to trace it to this change that caused it.

I have a simple workaround, if in the test environment don't set a timeout value (or make sure we nock all requests) but it feels like a bug to me that the axios promise throws but yet it remains running.

#### Context

- axios version: *v0.16.2*
- nock version: *v9.0.13*
- jest version: *v20.0.4*
- Environment: *node v6.10.2*

lib/adapters/http.js
});
    
    req.on('error', function handleRequestError(err) {
      if (req.aborted) return;
      reject(enhanceError(err, config, null, req));
    });
    
    if (config.timeout && !timer) {
      timer = setTimeout(function handleRequestTimeout() {
        req.abort();
        reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', req));
      }, config.timeout);
    }
    if (config.cancelToken) {
      
      config.cancelToken.promise.then(function onCanceled(cancel) {
        if (req.aborted) return;
        req.abort();
        reject(cancel);
      });
    }
    
    if (utils.isStream(data)) {
      data.pipe(req);
    } else {
      req.end(data);
    }
  });
};