Компонент, который я пишу, должен изменить его поведение в зависимости от того, нажата ли кнопка ctrl.Экранное событие для тестового окна в Reactjs
Я использую window.onkeydown
событие, но Simulate
от Реагировать Test Utils не позволяет мне отправлять события против window
. Я также пробовал window.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 17 }));
, но mocha/node не распознает KeyboardEvent
.
Есть ли способ для тестирования window.onkeydown
с использованием Утилиты для испытаний на реакцию? если нет, есть ли лучший способ сделать это в мокко для узла?
Вот код для ilustrate вопрос:
describe('On Keydown',() => {
it('fires the event',() => {
// Component
const Component = class extends React.Component {
constructor(props) {
super(props);
this.state = { key: false };
window.addEventListener('keydown', e => this.setState({ key: true }));
window.addEventListener('keyup', e => this.setState({ key: false }));
}
render() {
return <span>test</span>
};
};
// Rendering
const rendered = renderIntoDocument(<Component/>);
// Firing event
expect(rendered.state.key).to.equal(false);
// Error here
Simulate.keyDown(window, { keyCode: 17 });
expect(rendered.state.key).to.equal(true);
});
});
насчет проверки того, что compononent будет слушать KeyDown события? Возможно, это должно быть частью спецификации. Если нет, можно удалить «addEventListener», и компонент все равно пройдет тест. – jokka
Действительная точка. Лично я полагаюсь на тесты автоматизации для тех видов вещей, и пусть модульные тесты проверяют логику. –
Достаточно хорошо. Это просто меня немного беспокоит, что обработчик событий в основном частный метод, и тест полагается на него. Но это не имеет большого значения. – jokka