Используйте Jest для проверки конечной точки API и ее ответа - PullRequest
1 голос
/ 09 октября 2019

Я хочу использовать jest для проверки конечной точки API, чтобы проверить, возвращает ли он ответ и содержит ли JSON ключи параметров, которые мне нужны.

Моя функция выглядит следующим образом:

export function getFiveDayWeatherByCoordinates(id) {
  let url = FORECAST_ID_URL(id);

  return fetch(url)
    .then(response => response.json())
    .then(data => {
      return data;
    })
    .catch(err => console.log(err));

}

Возвращает JSON с набором параметров, я опубликую только снимок:

{
cnt: 14,
cod: "200",
city: {
  coord: {lat: 38.7169, lon: -9.1333},
  country: "PT",
  id: 8012502,
  name: "Socorro",
  population: 0,
  timezone: 3600,
}

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

1 Ответ

0 голосов
/ 09 октября 2019

Я бы предложил использовать Frisby.js для проверки ответов API. Это отличная тестовая среда для тестирования API, которая работает в Jest. Я использовал это много раз для написания тестов API и бэкэнд-интеграции. Хотя я обычно держу эти наборы тестов отдельно от своих модульных тестов пользовательского интерфейса.

Вот пример:

it('should return weather coords', async () => {
  return frisby
    .get(`${global.apiUrl}/my-weather-endpoint`)
    .expect('status', 200)
    .expect('jsonTypes', Joi.object({
      cnt: Joi.number().required(),
      cod: Joi.string().required(),
      city: Joi.object({
        coord: Joi.object({ 
          lat: Joi.number().required(),
          lon: Joi.number().required()
        }),
        country: Joi.string().required(),
        id: Joi.number().required(),
        name: Joi.string().required(),
        population: Joi.number().required(),
        timezone: Joi.number().required()
    }).required()
  });
});

Фрисби также поощряет использование платформы проверки Joi (он уже включен в пакет npm).

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