【发布时间】:2020-07-16 15:05:17
【问题描述】:
我已经一起模拟了一个小例子 - 单击按钮 1,然后显示另外 2 个按钮。
我可以很好地通过点击来测试这个旅程 - 但是,当我尝试测试按钮上的 Enter 按键时,似乎什么都没有发生,即使事情正在按预期使用我放置的事件侦听器登录控制台在测试中。
我用这里的代码创建了一个沙箱: https://codesandbox.io/s/gifted-beaver-uetbm?file=/src/tests/app.js
it('should display additional buttons when "Button 1" has been pressed via keyboard', () => {
const {button1, button2} = renderApp()
button1.addEventListener('keydown', () =>
console.log('Button 1 has been pressed - keydown'),
)
fireEvent.keyDown(button1, {
key: 'Enter',
code: 13,
charCode: 13,
keyCode: 13,
})
expect(button2).toBeVisible()
});
我可以通过添加一个 onKeyPress 属性来强制它在我的组件中工作,但这感觉就像为了通过测试而复制代码 - 当它作为标准工作时我不喜欢这样的想法还是在浏览器中?
<button
onClick={() => setShowButtons(!showButtons)}
// this works, but I don't think I should be duplicating code to appease tests?
// onKeyDown={e => e.keyCode === 13 && setShowButtons(!showButtons)}
>
Button 1
</button>
似乎被触发的事件是在明确寻找它们所关联的事件,而不是副产品 - 例如在按钮上按 enter 并期望触发 click 事件。不管这是标准的浏览器行为吗?也许我错了?
我真的很难过 - 我觉得这应该有效吗?任何帮助都会很棒!谢谢
【问题讨论】:
标签: reactjs jestjs keyboard-events jsdom