Ответ 1
Вместо использования keyCode я использовал ключ в случае 'Enter', используя mount
:
wrapper.find('input').simulate('keypress', {key: 'Enter'})
Я пытаюсь имитировать событие keyDown
, особенно для Enter, keyCode: 13
. Я пробовал несколько разных способов сделать это, но никто из них не работает. Я также посмотрел онлайн, и кажется, что эта функция либо глючит, либо не работает в текущей версии Enzyme. Кто-нибудь знает окончательно, если эта функция работает, и если да, то какой правильный синтаксис для имитации ввода или других типов ключевых событий? Спасибо!
Это то, что у меня есть сейчас, и оно не работает:
const input = wrapper.find('input');
input.simulate('keyDown', {keyCode: 13});
Моя текущая версия Enzyme - 2.4.1
Вместо использования keyCode я использовал ключ в случае 'Enter', используя mount
:
wrapper.find('input').simulate('keypress', {key: 'Enter'})
Я использую "мелкое" крепление (Enzyme 3.7.0 с Jest 23.6.0). Эта работа для меня:
const input = wrapper.find('input');
input.simulate('change', { target: { value: 'abcdefg'} });
input.simulate('keydown', { keyCode: 13 });
wrapper.find('input').simulate('keydown');
Это работает для меня...
const wrapper = mount(<App />);
const input = wrapper.find('input');
input.props().onKeyDown({key: 'Enter'});
Предполагается, что имитация фермента будет удалена в версии 4. Главный сопровождающий предлагает напрямую вызывать функции поддержки. Одним из решений является прямое тестирование того, что вызов этих реквизитов делает правильную вещь; или вы можете смоделировать методы экземпляра, проверить, что их вызывают функции prop, и выполнить модульное тестирование методов экземпляра.
Вы можете нажать клавишу вниз, например,
wrapper.find('input').prop('onKeyDown')({ key: 'Enter' })
или
wrapper.find('input').props().onKeyDown({ key: 'Enter' })
Информация об устаревании: https://github.com/airbnb/enzyme/issues/2173
Это на самом деле зависит от реализации. Если вы использовали что-то подобное в своей реализации:
if (event.charCode === 13) {
// do something
}
вы бы смоделировали событие в своем тесте следующим образом:
wrapper.find('input').simulate('keypress', { charCode: 13 });
Надеюсь, это поможет :-).
Это работает отлично:
wrapper.find('#id1').simulate('keyDown', {key: 'ArrowRight'});
wrapper.find('#id2').simulate('keyDown', {key: 'Ender'})