你如何在Enzyme中模拟keyDown输入事件(或其他)?

ree*_*rix 34 frontend unit-testing reactjs enzyme

我试图模拟一个keyDown事件,专门用于输入,keyCode: 13.我已经尝试了许多不同的方法来做到这一点,但它们都没有奏效.我也看过网上,似乎这个功能要么是错误的,要么在当前版本的Enzyme中不起作用.有没有人知道这个功能是否有效,如果有的话,模拟输入或其他类型的关键事件的正确语法是什么?谢谢!

这就是我目前所拥有的,它不起作用:

const input = wrapper.find('input');
input.simulate('keyDown', {keyCode: 13});
Run Code Online (Sandbox Code Playgroud)

我目前的酶版本是2.4.1

ale*_*ree 46

在'Enter'的情况下,我使用了一个键而不是使用keyCode,使用mount:

wrapper.find('input').simulate('keypress', {key: 'Enter'})
Run Code Online (Sandbox Code Playgroud)

  • 我为此苦苦挣扎,但记得我使用的是keyDown事件而不是keyPress.如果你遇到困难,请记住这一点. (5认同)
  • 哦,我遇到了问题."keyPress"应该是"按键".为我工作!! (4认同)
  • 它很糟糕,在官方文档中没有任何相关内容! (4认同)
  • 这不适用于 onKeyDown,您需要使用 `.simulate('keydown', { key: 'Enter' });` 也就是说,如果您的检查是 `if (e.key === 'Enter')` (3认同)

Bla*_*ack 15

不推荐使用模拟解决方案

酶模拟应该在版本 4 中删除。主要维护者建议直接调用 prop 函数。一种解决方案是直接测试调用这些 props 是否正确;或者您可以模拟实例方法,测试 prop 函数是否调用它们并对实例方法进行单元测试。

例如,您可以按下键

wrapper.find('input').prop('onKeyDown')({ key: 'Enter' }) 
Run Code Online (Sandbox Code Playgroud)

或者

wrapper.find('input').props().onKeyDown({ key: 'Enter' }) 
Run Code Online (Sandbox Code Playgroud)

弃用信息:https : //github.com/airbnb/enzyme/issues/2173


小智 14

我正在使用“浅”挂载(带有Jest 23.6.0的酶3.7.0)。这项工作对我来说:

const input = wrapper.find('input');
input.simulate('change', { target: { value: 'abcdefg'} });
input.simulate('keydown', { keyCode: 13 });
Run Code Online (Sandbox Code Playgroud)


Tho*_*ohn 7

wrapper.find('input').simulate('keydown');
Run Code Online (Sandbox Code Playgroud)

这个对我有用...