Как проверить, был ли вызван метод импортируемого класса в компоненте с шуткой / энзимом? - PullRequest
1 голос
/ 27 июня 2019

У меня есть такой код в компоненте:

export class VehiclesComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      data: [],
    };
    autoBind(this);
  }

  componentDidMount () {
    this.fetchData();
  }

  fetchData() {
    const {
      query,
      filter,
      hasAccess,
      value2,
      value,
      value3,
      name,
      topics,
    } = this.props;
    const { data } = this.state;

    if (value || value2) {
      return DataService.getCars(
        filter,
        hasAccess,
        name,
        topics,
      ).then((cars) => {
        this.setState({
          data: [...data, ...cars],
        });
      });
    } else if (value3) {
      return DataService.getBuses(
        filter,
        hasAccess,
        query,
      ).then((buses) => {
        this.setState({
          data: [...data, ...buses],
        });
      });
    }
  };

  render() {
    return(...)
  }
};

Моя проблема в том, что я не знаю, как правильно проверить, какая служба была вызвана в зависимости от пропущенных реквизитов (значение, значение2 или значение3). Я хочу проверить, были ли вызваны DataService.getBuses или DataService.getCars. Я пытался издеваться над этим сервисом:

import DataService from '../../services/DataService';
jest.mock("../../services/DataService");


DataService.mockImplementation(() => {
    return {
      getCars: () => Promise.resolve([])
    }
  });

Но мои тесты все еще не пройдены, у меня есть TypeError: Невозможно прочитать свойство 'then' из неопределенного

  35 |
  36 |   componentDidMount() {
> 37 |     DataService.getCars().then(cars => {});

1 Ответ

0 голосов
/ 03 июля 2019

Я решил это, выполнив следующее:

jest.doMock("../../services/DataService", () => ({
  getCars: jest.fn(() => Promise.resolve([])),
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...