【问题标题】:ReduxForm is rendered twice when mounted via enzymeReduxForm 在通过酶安装时被渲染两次
【发布时间】:2019-05-27 04:10:22
【问题描述】:

在将 react-redux 升级到 6.0.0 并将 redux-form 升级到 8.1.0 之后,我正在尝试调整我的测试以遵循重大更改(连接的组件不再存储在 props 中)

我需要在测试中将我连接的组件从 react-redux 包装起来,并使用 mount 来获取实际组件,但现在 ReduxForm 被渲染了两次。 我尝试使用 hostNodes() 方法,但它返回 0 个元素。 任何想法如何解决它?

这是测试:

import React from 'react'
import { mount } from 'enzyme'
import configureStore from 'redux-mock-store'
import { Provider } from 'react-redux'
import PasswordResetContainer from './PasswordResetContainer'

describe('PasswordResetContainer', () => {
  it('should render only one ReduxForm', () => {
    const mockStore = configureStore()
    const initialState = {}
    const store = mockStore(initialState)
    const wrapper = mount(<Provider store={store}><PasswordResetContainer /></Provider>)

    const form = wrapper.find('ReduxForm')
    console.log(form.debug())
    expect(form.length).toEqual(1)
  })

PasswordResetContainer 看起来像这样:

import { connect } from 'react-redux'
import { reduxForm } from 'redux-form'
import PasswordReset from './PasswordReset'
import { resetPassword } from '../Actions'

export const validate = (values) => {
  const errors = {}

  if (!values.email) {
    errors.email = 'E-mail cannot be empty.'
  } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.email)) {
    errors.email = 'Invalid e-mail.'
  }
  return errors
}

export default connect(null, { resetPassword })(
  reduxForm(
    { form: 'passwordReset',
      validate
    })(PasswordReset))

测试输出如下:

PasswordResetContainer › should render only one ReduxForm

    expect(received).toEqual(expected)

    Expected value to equal:
      1
    Received:
      2

编辑(找到部分解决方案):

当我改变wrapper.find('ReduxForm') 进入wrapper.find('ReduxForm&gt;Hoc&gt;ReduxForm'),它开始工作了。
为什么我需要施展这样的魔法?

【问题讨论】:

标签: react-redux enzyme redux-form


【解决方案1】:

修复了要创建的库模块,但如果表单相同,解决此问题的一种快速方法是在 find 之后调用 first() 以便

wrapper.find('ReduxForm')

看起来像:

wrapper.find('ReduxForm').first()

【讨论】:

  • 是的,但这可以隐藏问题。如果其他人添加代码来创建两个 ReduxForms(会生成 4 个)怎么办?
猜你喜欢
  • 2017-10-20
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多