Как смоделировать / проверить нажатие клавиши с помощью Jest? - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь смоделировать / протестировать событие нажатия клавиши, которое вызывает props.onClick. Я успешно смоделировал onClick с помощью аналогичного кода тестирования, но нажатие клавиши не работает.

Когда я тестировал его вручную, нажимая клавишу Enter, он работает как надо, но когда я пытаюсь написать для него тесты, он продолжает давать сбой, и я не уверен, почему. Я поместил регистратор в функцию useEffect, и он вызывается во время теста, но он дает сбой и выдает ошибку, что onClickFnc никогда не вызывался.

В моем компоненте функции кнопки я связываю прослушиватель событий:

button. js

  useEffect(() => {
    if (enterEnable) {
      window.addEventListener('keydown', onEnterPress);
      return () => window.removeEventListener('keydown', onEnterPress);
    }
  });

  const onEnterPress = e => {
    if (e.which == 13) {
      onClickSync(e);
    }
  };

  const onClickSync = e => {
    props.onClick(e);
  };

button.test . js

  it('check ButtonLoader enable enter to work', () => {

    const onClickFnc = jest.fn(); 
    const wrapper = shallow(<ButtonLoader {...props} enterEnable={true} onClick={onClickFnc}/>);
    wrapper.find('button').simulate('keypress', {key: 'Enter'})
    expect(onClickFnc).toBeCalled();
  });

Ошибка:

    expect(jest.fn()).toBeCalled()

    Expected number of calls: >= 1
    Received number of calls:    0

Как мне успешно это проверить?

1 Ответ

0 голосов
/ 13 февраля 2020

Попробуйте вместо этого

wrapper.find('button').simulate('keydown', {which: 13})

Из того, что я видел, симуляция не создает объект события из аргументов. Вместо этого он передает объект как есть.

...