У меня есть поле ввода следующим образом:
<Input name="score" type="number" className={cx(['input-width'])} value={this.state.score} isIncomplete={false} isInvalid={this.state.isScoreInvalid} min="0" max="100" onKeyPress={this.handleInput} onChange={this.updateValue} onBlur={this.updateScoreInvalidState} />
Ниже вызывается функция OnKeypress
handleInput(event) {
const charCode = (typeof event.which === 'number') ? event.which : event.keyCode;
if (charCode === 45 || charCode === 46) {
console.log("Here-------------");
event.preventDefault();
event.stopPropagation();
}
}
Ниже вызывается функция onChange
updateValue(event) {
this.setState({ [event.target.name]: event.target.value });
}
Я хочу чтобы проверить это поведение: Если неверный ввод: '-' ИЛИ '.' Игнорируйте ввод и не обновляйте оценку переменной состояния. Пройдите следующий тест.
it('should render input field correctly with invalid character as input', () => {
const wrapper = shallowWithIntl(<TestView {...testProps} />).first().shallow();
const score = wrapper.find('Input[name="score"]');
const onKeypressEvent = {
preventDefault: jest.fn(),
stopPropagation: jest.fn(),
which: 45,
target: { name: 'score', value: '-' },
};
const onChangeEvent = {
target: { name: 'score', value: '-' },
};
expect(wrapper.state('score')).toEqual(5);
expect(wrapper.state('isScoreInvalid')).toEqual(false);
score.simulate('keypress', onKeypressEvent);
score.simulate('change', onChangeEvent);
wrapper.update();
expect(wrapper.state('score')).toEqual(5);
expect(wrapper.state('isScoreInvalid')).toEqual(false);
});
Тест не работает должным образом. Это не мешает событию.
Как проверить эту функциональность? Спасибо!