Jest - метод тестирования, который передается дочернему компоненту - PullRequest
0 голосов
/ 22 сентября 2018

Я новичок в тестировании компонента React, поэтому я пытаюсь протестировать некоторый метод в родительском компоненте, который передается дочернему компоненту в качестве подпорки.Для этого я использую Jest и Enzyme.

Мой тест:

it('should be able to call myMethod callback', () => {
  const mockFn = jest.fn();
  ParentComponent.prototype.myMethod = mockFn;

  const wrapper = Enzyme.shallow(<ParentComponent />);
  wrapper.find('ChildComponent').props().myMethod();

  expect(mockFn).toHaveBeenCalledTimes(1);
});

Тест пройден, но myMethod не вызывается (myMethod не охватывается тестами).

Когда я использую:

wrapper.instance().myMethod = mockFn;

вместо:

ParentComponent.prototype.myMethod = mockFn;

все наоборот - вызывается myMethod, но тест не пройден с ошибкой:

expect(jest.fn()).toHaveBeenCalledTimes(1)

Expected mock function to have been called one time, but it was called zero times.

Как я могу решить это?Заранее спасибо.

1 Ответ

0 голосов
/ 22 сентября 2018

Вы присваиваете myMethod фиктивной функции, которая ничего не делает, даже вашей оригинальной myMethod.Когда вы создаете jest.fn(), он в основном создает фиктивную фиктивную функцию, которая ничего не делает.Поэтому, когда вы вызываете wrapper.find('ChildComponent').props().myMethod(), он просто вызывает эту функцию, но не ваш myMethod.

. Возможно, вы захотите шпионить за вашим методом вместо этого.

jest.spyOn(ParentComponent.prototype, 'myMethod'); // ParentComponent.prototype.myMethod is now a mock function

expect(ParentComponent.prototype.myMethod).toHaveBeenCalledTimes(1); // it works
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...