javascript - enzyme /ReactJS : How to find specific child component

标签 javascript reactjs enzyme

我正在尝试对组件进行 enzyme /笑话单元测试。我需要模拟特定子组件的更改事件(因为有两个子组件)。

const wrapper = shallow(<CreateAccount />)
wrapper.find({ name: 'username' }).simulate('change', { target: { value: 'Username' } })
wrapper.find({ password: 'password' }).simulate('change', { target: { value: 'Password' } })
const state = wrapper.instance().state
expect(state).toEqual({ username: 'Username', password: 'Password' })

但这不是查找两个输入组件的正确方法...

这就是我的组件的 render() 函数的样子:

render () {
  return (
    <Form onSubmit={this._onSubmit.bind(this)}>
      <Input
        value={this.state.description}
        onChange={this._onChange.bind(this)}
        name='username'
        type='text'
        placeholder='Username'
      />
      <Input
        value={this.state.url}
        onChange={this._onChange.bind(this)}
        name='password'
        type='password'
        placeholder='Password'
      />
      <Button type='submit'>
        Submit
      </Button>
    </Form>
  )

最佳答案

通常 find() 返回一个数组,因此您必须使用 at(index)first() 来访问特定元素:

http://airbnb.io/enzyme/docs/api/ShallowWrapper/at.html http://airbnb.io/enzyme/docs/api/ShallowWrapper/first.html

在您的情况下,您还可以导入 Input 组件并像这样找到它们:

import Input from 'input-component-path'

...
wrapper.find(Input).at(0).simulate('change', { target: { value: 'Username' } })
wrapper.find(Input).at(1).simulate('change', { target: { value: 'Password' } })

关于javascript - enzyme /ReactJS : How to find specific child component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47157104/

相关文章:

Reactjs、jest、enzyme、react-universal-component - 如何使用动态导入测试组件结构?

javascript - 如何从我的 Javascript 代码加载用 JSX 代码编写的 React 组件

javascript - 单击以打开灯箱画廊时如何链接按钮?

javascript - 菜单打开时如何展开DIV

javascript - 如何使用 HighStock 的 tickPositioner 设置月末报价?

javascript - 如何使用 Axios 将图像发送到 Node js?

reactjs - 文本区域未填充默认值,而是在文本区域顶部显示值?

reactjs - 使用 toHaveBeenNthCalledWith 时 react Jest 测试错误

reactjs - React Jest/ enzyme 测试 : useHistory Hook Breaks Test

javascript - setTimeout(..0) 排序