Как макетировать строку в модульном тесте с помощью Nock, Node js - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь ввести одну строку в модульном тесте, который мне не удался, кажется, что он соответствует реальному запросу, следующий код является частью football api, и мне нужно смоделировать последнюю строку в этом файле

module.exports.getSummary = async ({ uuid, market}) => {
  const { countryCode } = AppConfigs.Markets[market];
  let url = `${host}${getSummary}`;

  url = url.replace('[market]', countryCode);
  url = url.replace('[uuid]', uuid);
  Log.debug('Getting Summary Info from football API', { url }, 'Subscription::index', 'info');

 // this line which i need to inject
  const result = await Helpers.http.get({}, url, undefined);

  return result;
};

и вот макет, который я попробовал

const chai = require('chai');
const nock = require('nock');

const FootballApi = require('../../server/services/football/index');
const SummaryMock = require('./getSummary.mock');

const { expect } = chai;

describe('get Summary', () => {
  it('Should return null', async () => {
    before(() => {
      const { req, res } = SummaryMock.getSummary;

      const mock = nock(FootballApi.getSummary(req));
      mock.get(req.path).reply(200, res);
    });

    const { res } = SummaryMock.getSummary;
    const response = await FootballApi.getSummary(SummaryMock.getSummary.req);
    console.log(response);
    console.log(res);
  });
});

1 Ответ

0 голосов
/ 26 сентября 2018

Кажется, я неправильно понял, что делает Нок. Вот как работает Нок.

  1. вам нужно будет смоделировать URL-адрес хоста.
  2. вам нужно будет смоделировать путь, использовать любой метод http, но он должен быть точно таким же, как существующие URL и параметры запроса.
  3. после этого Nock попытается объединить их и посмотреть, есть ли соответствующий URL например

наш хост: http://www.example.com

наш путь: /uuid/training

тогда мы должны сделать что-то подобное

 const mockHttp = nock(training.baseUrl); //mock the http
 mockHttp.get(ourPath).reply(200, ourBody); //mock exact path

теперь, если URL-адрес Nock соответствует паролю, Nock будет работать как шарм, иначе он выдаст исключение Nock, не соответствующее конкретному URL

...