Вызвать ложную функцию из другой функции в Jest - PullRequest
0 голосов
/ 13 декабря 2018

Я пишу приложение React и хочу проверить, правильно ли мой компонент извлекает данные;используя Jest и Enzyme.Я хочу вызвать поддельную функцию из другой функции, которую я проверяю в своем тесте шутки:

const axios = jest.mock('axios', () => {
  const mockData = {
    schools: [
      {
        id: 4,
        title: 'ABC',
        company: {
          id: 41,
          distance: '0.6 KM AWAY',
          logo: 'https://abc.xyz.jpg',
        },
        fee: 'NA',
        type: 'public',
        gender: 'Mixed',
      },
    ],
  };

  return {
    get: jest.fn(() => Promise.resolve(mockData)),
  };
});

jest.fn('getData', () => {
  axios.get();
});

const props = {
  searchResult: {
    payload: [],
    isLoading: false,
    error: {},
    searchString: '',
  },
  getData: jest.fn(axios.get()),
};

it('fetch search data on click', () => {
  const search = shallow(<SearchComponent {...props} />);
  search
    .props()
    .getData()
    .then(() => {
      expect(axios.get).toHaveBeenCalled();
      expect(axios.get).toHaveBeenCalledWith('data.json');
      expect(search.exists('search-result-card')).toBe(true);
    });
});

Код компонента (только важные части, невозможно вставить весь код, поскольку он слишком большой):

export class SearchResultComponent extends React.PureComponent {
render() {
       const { searchResult, getData } = this.props;
       <SearchInput
         placeholder="Enter keyword..."
         onClick={searchString => getData(searchString)}
       />
    }
}

Когда я запускаю тест, я получаю эту ошибку:

TypeError: axios.get is not a function

Что здесь не так, и как я могу это исправить?

1 Ответ

0 голосов
/ 14 декабря 2018

Также есть несколько других проблем, но я сосредоточусь на ответе на заданный вопрос, поэтому возникает следующая ошибка и как ее исправить:

TypeError: axios.get is not a function


Issue

axios.get не является функцией, поэтому ее вызов при создании реализации для фиктивной функции для props.getData вызывает TypeError.


Details

jest.mock "возвращает объект jest для создания цепочки" .

const axios = jest.mock('axios', () => ...); назначает axios объекту jest.

axios.get() запускается, чтобы получить реализацию фиктивной функции для свойства getData props (угадывание axios.get должно быть передано вместо axios.get()).

Объект jest делаетне содержит определения для get, поэтому выполнение axios.get() вызывает TypeError, указывающее, что axios.get is not a function.


Solution

Import axios как обычно в верхней частиВаш тестовый файл:

import axios from 'axios';

Вызов jest.mock поднимается и выполняется первым, поэтому импорт axios как обычно будет выполняться.mport the mock.

axios.get будет относиться к вашей смоделированной функции get, как и ожидалось.

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