Как мне посмеяться над асинхронными выборками с шуткой? - PullRequest
0 голосов
/ 05 июня 2018

Я пытался выяснить, как правильно тестировать этот код в течение нескольких дней: (* ​​1001 *

const request = require('superagent');

const getDog = () => {
  return request.get('https://dog.ceo/api/breeds/image/random');
};

it('resolves', () => {
  // Expect mocked response
});

it('rejects', () => {
  // Expect mocked response
});

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Одним из решений является использование библиотеки, такой как nock или fetch-mock , чтобы смоделировать HTTP-ответ на ваш запрос.

0 голосов
/ 05 июня 2018

В большинстве случаев ваш код получает какое-то значение из API, анализирует его и делает с ним что-то еще.
В результате вы не хотите делать реальный вызов API и вместо этого имитировать его.
Естьпара способов сделать это.Один из возможных способов - это смоделировать единственный метод в библиотеке superagent.

// tell jest not to mock superagent because we'll mock the only method
jest.unmock('superagent');

const request = require('superagent');

const getDog = () => {
  return request.get('https://dog.ceo/api/breeds/image/random');
};

it('resolves', () => {
  // mock the get request to resolve object
  request.get = jest.fn().mockResolvedValue({
  message: 'Your message'
  });
  // Expect mocked response
  expect.assertions(1);
  return expect(getDog()).resolves.toEqual({
  message: 'Your message'
  });
});

it('rejects', () => {
  // mock the get request to reject object
  request.get = jest.fn().mockRejectedValue({
  message: 'Your error'
  });
  // Expect mocked response
  expect.assertions(1);
  return expect(getDog()).rejects.toEqual({
    message: 'Your error'
  });
});

Я использовал expect.assertions(1), есть причина :

Это часто полезно при тестировании асинхронного кода, чтобы убедиться, что утверждения в обратном вызове действительно были вызваны.

Существуют ссылки, которые могут вам помочь: mockFn.mockResolvedValue (значение) , .rejects

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...