Как проверить функцию с другой функцией внутри с помощью Jest? - PullRequest
0 голосов
/ 12 октября 2018

Я только начинаю изучать тесты на реакцию и застрял на этом моменте.

Вот моя функция:

private handleCountyItemClick = (
    e: React.FormEvent<HTMLButtonElement>
  ): void => {
    const { countries } = this.props.countriesRed;
    const selectedId: number = parseFloat(e.currentTarget.dataset.value);
    const foundCountry = countries.find(
      (country: Country, i: number) => i === selectedId
    );
    if (foundCountry) {
      this.props.CountyItemClick(foundCountry);
      this.props.clearInput();
      this.setState({
        dropdownOpen: false,
        fullWidthFullHeightElHeight: 54
      });
      this.countriesListItems.current.style.height = "";
      scrollIt(this.props.countriesRootEl.current, 300, "easeOutQuad", () =>
        enableBodyScroll(this.countriesListItems.current)
      );
    }
  };

и после этого я написал этот тест, и у меня появляется ошибка:

it("should update the count by 1 when invoked by default", () => {
    const wrapper = shallow(component);
    const instance = wrapper.instance();
    instance.handleCountyItemClick({
      currentTarget: { dataset: { value: 1 } }
    });
  });

Ошибка:

TypeError: _this.props.CountyItemClick is not a function

Как видите, в моей функции я использую другую функцию из Redux, и эта ошибка относится к функции из Redux.Я не знаю, что мне нужно делать дальше!Что мне нужно сделать?Как поступить?

1 Ответ

0 голосов
/ 12 октября 2018

Похоже, вам нужно издеваться над реквизитом.

let props;
let wrapper;

beforeEach(() => {
  props = {
    CountyItemClick: jest.fn(),
  };
  wrapper = shallow(<Component {...props} />);
});

it("should update the count by 1 when invoked by default", () => {
  const wrapper = shallow(component);
  const instance = wrapper.instance();
  instance.handleCountyItemClick({
    currentTarget: { dataset: { value: 1 } }
  });

  expect(props.CountyItemClick).toHaveBeenCalled();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...