den0820
@den0820
Фронтенд Junior разработчик.

Не могу разобраться с симуляцией события keyUp на Jest?

Здравствуйте. Пробую писать тесты на Jest. Столкнулся с проблемой описания события keyUp. Подскажите что не так в моем тесте

React:
state = {
        tabFocused: false
    };

onKeyUp = (e: SyntheticKeyboardEvent<HTMLElement>) => {
        if (
            e.keyCode === KEY_CODES.TAB &&
            document.activeElement === this.input
        ) {
            this.setState(() => ({
                tabFocused: true
            }));
        }
    };

render() {

        return (
            <label onKeyUp={this.onKeyUp}>
                <span>
                    <input
                        disabled={disabled}
                        type="checkbox"
                        checked={value}
                        id={id}
                        name={name}
                        className={sn('toggle__input')}
                        onChange={({target: {checked}}) => onChange(checked)}
                        onFocus={onFocus}
                        onBlur={this.onBlur}
                        ref={this.withRef}
                    />
                </span>
            </label>
        );
    }


Test:
import React from 'react';
import {shallow, mount} from 'enzyme';
import {Input} from '../../src';

test('calls onKeyUp', () => {
        const wrapper = shallow(<Input.Toggle id="toggle" name="test-toggle" />);
        expect(wrapper.state().tabFocused).toBe(false);
        wrapper.find('.toggle').simulate('keyUp', {keyCode: 9});
        expect(wrapper.state().tabFocused).toBe(true);
    });


5b3dd79a6ab94659347656.png
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ответы на вопрос 1
alexiusp
@alexiusp
senior frontend developer
enzyme, который ты судя по всему используешь (jest тут ни при чём) не симулирует браузерные эвенты. он просто вызывает обработчик указанного события, привязанный к найденному элементу. У тебя обработчик привязан к label, поэтому его и нужно искать для запуска simulate. ты же ищешь, как я понимаю, input и пытаешься вызывать simulate у него.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы