Verspotten von http-Anfragen im Node mit Mocha und Sinon

Ich habe eine NodeJS-App mit Express geschrieben, die einige Aufrufe an externe APIs weiterleitet. Also versuche ich, einen Komponententest mit Mocha und Sinon zu schreiben. Mein Ziel ist es, die App ohne Internetverbindung zu testen. Daher versuche ich, die https-Anforderungen zu verspotten und falsche Antworten zurückzugeben.

Ich habe ein Problem, bei dem ich keine Beispiele oder Tutorials finde, die zu meinem Fall passen. Meine Node-App wartet auf Port 8081 auf http-Anforderungen und leitet sie dann an eine andere Site weiter. Ich möchte meine App testen, ohne dass die Anfrage tatsächlich an diese externen Server gesendet werden muss. Ich versuche es unten und ich habe die json-Antworten, die ich zurückschicken möchte, in die server.respondsWith () -Funktion geschrieben.

Mache ich das richtig, indem ich mit Chai einen Ajax-Anruf tätige? oder sollte ich die Anfragen irgendwie in meiner App verschicken. Jede Hilfe wird gebeten.

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();
      });
    });
});

Antworten auf die Frage(4)

Ihre Antwort auf die Frage