我正在編寫的組件需要根據是否按下ctrl來更改其行爲。Reactjs中的測試窗口keydown事件
我使用window.onkeydown
事件,而是從Simulate
陣營測試utils的不允許我來分發事件對window
。我也試過window.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 17 }));
,但摩卡/節點不識別KeyboardEvent
。
有沒有辦法測試window.onkeydown
使用React Test Utils?如果沒有,是否有更好的方法在摩卡上做節點?
下面是一些代碼來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