Burlándose de solicitudes http en el nodo usando mocha y sinon

He escrito una aplicación NodeJS usando express que representa algunas llamadas a API externas. Así que estoy tratando de escribir una prueba unitaria usando Mocha y Sinon. Mi objetivo es probar la aplicación sin conexión a Internet, así que estoy tratando de burlarme de las solicitudes https y devolver respuestas falsas.

Tengo un problema que no puedo encontrar ejemplos o tutoriales que se adapten a mi caso. Mi aplicación de nodo escucha en el puerto 8081 las solicitudes http y luego las envía a otro sitio. Quiero probar mi aplicación sin tener que enviar la solicitud a esos servidores externos. Lo intento a continuación y pongo las respuestas json que quiero enviar de vuelta en la función server.respondsWith ().

¿Estoy haciendo esto de la manera correcta al hacer una llamada ajax con chai? o debería enviar las solicitudes dentro de mi aplicación de alguna manera. Cualquier ayuda es apreciada.

var assert = require('assert');
var chai = require('chai');
var spies = require('chai-spies');
var chaiHttp = require('chai-http');
var https = require('https');
var should = chai.should();
var expect = chai.expect;
var sinon = require('sinon');

chai.use(spies);
chai.use(chaiHttp);

describe('Car Repository', function() {
  var server;
  before(function() {
    server = sinon.fakeServer.create();
  });

  after(function() {
    server.restore();
  });

  var url = 'http://127.0.0.1:8081';
  it('should succeed and return a list of cars', function(done) {
    server.respondWith('POST', 'https://api.sandbox.cars.com/v2/token_endpoint', JSON.stringify({"access_token":"1t3E4IykfpJAbuFsdfM2oFAo5raB5vhfOV0hAYe","token_type":"bearer","expires_in":604800}));
    server.respondWith('GET', url+'/cars', JSON.stringify({'test':'this works'}));

    chai.request(url)
      .get('/cars')
      .end(function(err, res) {
        if (err) {
          throw err;
        }

        res.should.have.status(200);
        res.body.should.have.property('test');
        console.log(res.body);

        done();
      });
    });
});

Respuestas a la pregunta(2)

Su respuesta a la pregunta