Асинхронный c тест для отправки с помощью Jest - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в тестировании и пытаюсь найти способ вызвать ошибку с помощью функции asyn c.

Вот тестовый файл

import Yelp from './Yelp';
import axios from 'axios';

jest.mock('axios');

describe('testing searchRestaurantsInfo', () => {

  // Other tests

  test('returns error', async () => {
    await expect(
      Yelp.searchRestaurantsInfo('q_IoMdeM57U70GwqjXxGJw')
    ).rejects.toThrow('Error');
  });
});

I получить ошибку

testing searchRestaurantsInfo › returns error

    expect(received).rejects.toThrow()

    Received promise resolved instead of rejected
    Resolved to value: "Error"

      102 | 
      103 |   test('returns error', async () => {
    > 104 |     await expect(
          |           ^
      105 |       Yelp.searchRestaurantsInfo('q_IoMdeM57U70GwqjXxGJw')
      106 |     ).rejects.toThrow(TypeError);
      107 |   });

И вот Yelp. js

import axios from 'axios';

let YELP_API_KEY = process.env.REACT_APP_YELP_API_KEY;

const Yelp = {
  // Provides info about a single restaurant
  async searchRestaurantsInfo(id) {
    try {
      let response = await axios.get(
        `https://cors-anywhere.herokuapp.com/https://api.yelp.com/v3/businesses/${id}`,
        {
          headers: {
            Authorization: `Bearer ${YELP_API_KEY}`,
            'X-Requested-With': 'XMLHttpRequest',
            'Access-Control-Allow-Origin': '*',
          },
        }
      );

      let responseRew = await axios.get(
        `https://cors-anywhere.herokuapp.com/https://api.yelp.com/v3/businesses/${id}/reviews`,
        {
          headers: {
            Authorization: `Bearer ${YELP_API_KEY}`,
            'X-Requested-With': 'XMLHttpRequest',
            'Access-Control-Allow-Origin': '*',
          },
        }
      );

      const parameters = {
        name: response.data.name,
        address: response.data.location.display_address[0],
        coordinates: {
          lat: response.data.coordinates.latitude,
          lng: response.data.coordinates.longitude,
        },
        city: response.data.location.display_address[1],
        rating: response.data.rating,
        photos: response.data.photos,
        phone: response.data.phone,
        price: response.data.price,
        categories: response.data.categories[0].title,
        url: response.data.url,
        reviews: responseRew.data.reviews,
      };

      return parameters;
    } catch (e) {
      console.log(e);
      return 'Error';
    }
  },
}

Я искал решение, и на самом деле то, что я придумал, происходит отсюда: Можете ли вы написать asyn c тесты, ожидающие Throw? но у меня это не работает, и я не понимаю, что делаю неправильно.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 07 августа 2020

Предполагая, что вы издеваетесь над axios.get, чтобы отклонить, прежде чем утверждать отклонение обещания в своем тесте, в блоке catch есть проблема в Yelp.js. Вам нужно повторно выбросить ошибку:

catch (e) {
      console.log(e);
      throw e;
}

Если вы не издевались над ax ios, чтобы выдать ошибку, добавьте это перед вызовом функции:

axios.get.mockRejectedValue('error');

Пусть я знаю, сработало ли это для вас.

...