Как вы имитируете событие ввода keyDown (или другие) в Enzyme?

Я пытаюсь имитировать событие keyDown, особенно для Enter, keyCode: 13. Я пробовал несколько разных способов сделать это, но никто из них не работает. Я также посмотрел онлайн, и кажется, что эта функция либо глючит, либо не работает в текущей версии Enzyme. Кто-нибудь знает окончательно, если эта функция работает, и если да, то какой правильный синтаксис для имитации ввода или других типов ключевых событий? Спасибо!

Это то, что у меня есть сейчас, и оно не работает:

const input = wrapper.find('input');
input.simulate('keyDown', {keyCode: 13});

Моя текущая версия Enzyme - 2.4.1

Ответ 1

Вместо использования keyCode я использовал ключ в случае 'Enter', используя mount:

wrapper.find('input').simulate('keypress', {key: 'Enter'})

Ответ 2

Я использую "мелкое" крепление (Enzyme 3.7.0 с Jest 23.6.0). Эта работа для меня:

const input = wrapper.find('input');
input.simulate('change', { target: { value: 'abcdefg'} });
input.simulate('keydown', { keyCode: 13 });

Ответ 3

wrapper.find('input').simulate('keydown');

Это работает для меня...

Ответ 4

const wrapper = mount(<App />);
const input = wrapper.find('input');
input.props().onKeyDown({key: 'Enter'});
  • Фермент 3.9.0
  • Реакт 16.8.6

Ответ 5

Предполагается, что имитация фермента будет удалена в версии 4. Главный сопровождающий предлагает напрямую вызывать функции поддержки. Одним из решений является прямое тестирование того, что вызов этих реквизитов делает правильную вещь; или вы можете смоделировать методы экземпляра, проверить, что их вызывают функции prop, и выполнить модульное тестирование методов экземпляра.

Вы можете нажать клавишу вниз, например,

wrapper.find('input').prop('onKeyDown')({ key: 'Enter' }) 

или

wrapper.find('input').props().onKeyDown({ key: 'Enter' }) 

Информация об устаревании: https://github.com/airbnb/enzyme/issues/2173

Ответ 6

Это на самом деле зависит от реализации. Если вы использовали что-то подобное в своей реализации:

if (event.charCode === 13) {
  // do something
}

вы бы смоделировали событие в своем тесте следующим образом:

wrapper.find('input').simulate('keypress', { charCode: 13 });

Надеюсь, это поможет :-).

Ответ 7

Это работает отлично:

wrapper.find('#id1').simulate('keyDown', {key: 'ArrowRight'});
wrapper.find('#id2').simulate('keyDown', {key: 'Ender'})