我正在编写的组件需要根据是否按下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