我正在编写的组件需要根据是否按下Ctrl键来改变其行为。
我使用了
是否有一种方法可以使用React Test Utils测试
这里是一些代码来说明这个问题:
我使用了
window.onkeydown
事件,但是来自React Test Utils的Simulate
不允许我对window
进行调度事件。我还尝试过window.dispatchEvent(new KeyboardEvent('keydown',{ keyCode: 17 }));
,但是mocha / node不会识别KeyboardEvent
。是否有一种方法可以使用React Test Utils测试
window.onkeydown
?如果没有,那么在mocha中有更好的方法吗?这里是一些代码来说明这个问题:
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);
});
});
addEventListener
,组件仍然可以通过测试。 - jokkaEvent
而不是KeyboardEvent
? - David Gilbertsonkeydown
事件来触发状态改变,从而影响另一个方法的行为,但你给了我两个想法。第一个是使用rendered.setState({key: true})
绕过事件,第二个是在test_helper.js
中创建一个类,使用节点Events
来重现窗口上的事件。我将第二个解决方案作为备选答案添加进去。 - Javier Conde