Не удалось зафиксировать вызов функции - PullRequest
0 голосов
/ 02 мая 2018

У меня возникла проблема при желании выполнить модульное тестирование функции, которая запускает http-запрос и получает данные. Запрос перехватывается, но функция не получает то, что я определил в предложении .reply () функции nock. Я боролся в течение многих часов без какой-либо подсказки, где проблема !!!

Это моя функция:

import request from 'request';
import { pick, map } from 'lodash';
import { logger, getEnv } from './utils';


export default function getStoresFromProductDB() {
  const dataToPick = [
    'iccli',
    'store_name',
  ];
  const host = 'http://localhost:4001';
  const url = `${host}/store`;
  logger.info(`Getting stores from product DB at URL ${url}`);

  return new Promise((resolve, reject) => {
    request(url, { json: true }, (err, res, body) => {
      if (err) {
        reject(err);
      } else {
        const { data } = body;
        resolve(map(data, store => pick(store, dataToPick)));
      }
    });
  });
}

А это мой тестовый код:

describe('Testing getting stores from product database', () => {
  it('should return 200 and the list of available stores from product database', async () => {
    nock('http://localhost:4001')
      .get('/store')
      .reply(200, stores);

    const data = await getStoresFromProductDB();
    console.log('​data', data);
  });
});

Можете ли вы помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 03 мая 2018

о боже, я решил проблему, речь шла о формате данных, который отвечает nock. Поскольку функция getStoresFromProductDB ожидала, что объект имеет массив данных, в котором содержатся данные, которые я хочу получить, поэтому это массив внутри объекта, и я отвечал непосредственно на массив. Это было глупо.

Итак, тестовый код должен быть таким:

describe('Testing getting stores from product database', () => {
  it('should return 200 and the list of available stores from product database', async () => {
    nock('http://localhost:4001')
      .get('/store')
      .reply(200, { data: stores });

    const data = await getStoresFromProductDB();
    console.log('​data', data);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...