Ложные http-запросы в узле с использованием mocha и sinon

Я написал приложение NodeJS, использующее Express, которое проксирует некоторые вызовы внешних API. Поэтому я пытаюсь написать модульный тест, используя Mocha и Sinon. Моя цель - протестировать приложение без подключения к Интернету, поэтому я пытаюсь смоделировать запросы https и вернуть ложные ответы.

У меня проблема с тем, что я не могу найти примеры или учебники, которые подходят для моего случая. Мое приложение узла прослушивает на порту 8081 запросы HTTP, а затем передает их на другой сайт. Я хочу протестировать свое приложение, не отправляя запрос на эти внешние серверы. Я пытаюсь сделать это ниже и помещаю ответы json, которые я хочу отправить обратно, в функцию server.respondsWith ().

Правильно ли я делаю это, делая вызов ajax с chai? или я должен как-то отправлять запросы внутри моего приложения. Любая помощь приветствуется.

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

Ответы на вопрос(1)

Решение Вопроса

Проверьтенатягивать тетиву библиотека. Это именно то, что вы ищете.

Nock - это библиотека HTTP-изданий и ожиданий для Node.js

Nock можно использовать для тестирования модулей, которые выполняют HTTP-запросы изолированно.

Например, если модуль выполняет HTTP-запросы к серверу CouchDB или HTTP-запросы к API Amazon, вы можете протестировать этот модуль изолированно.

 george_h19 июл. 2016 г., 21:31
Пробовал, работает как шарм.
 george_h19 июл. 2016 г., 08:12
Ух ты, мужчина Нок выглядит действительно великолепно, и их документация идеальна. Я потрачу некоторое время, чтобы попробовать это сейчас
 Mohammed Essehemy12 февр. 2019 г., 15:26
Спасибо, что поделились этим.

Ваш ответ на вопрос