首页 > 解决方案 > 模拟更改不适用于 formik 的选择元素

问题描述

我正在尝试测试一些formik 的选择元素,而模拟更改不起作用。

而对于 formik 的输入元素,相同的模拟更改效果很好。

零件:

 <Field
                      type="text"
                      name={'clientsData.language1_id'}
                      className={this.props.classes.textField}
                      label="Primary Language"
                      select
                      margin="normal"
                      variant="outlined"
                      component={TextField}
                      InputLabelProps={{
                        shrink: true
                      }}>
                      }}>
                      {this.props.languages.map(val => (
                        <MenuItem key={val.id} value={val.id}>
                          {val.value}
                        </MenuItem>
                      ))}
                    </Field>

安装包装:

wrapper = mount(
      <Router history={hist}>
        <ClientsContacts
          clientsData={clientsData}
          languages={languages}
          gender={gender}
          race={race}
          genders_identified={genderIdentified}
          actions={{ getDictionaryApiCall: mockGetDictionaryApiCall, getListApiCall: mockGetListApiCall }}
        />
      </Router>
    )

模拟更改和一些控制台日志以便更好地理解:

console.log(
      wrapper
        // .find('Select')
        .find('input')
        .at(6)
        .debug()
    )

    wrapper
      .find('input')
      .at(6)
      .simulate('change', { target: { value: '122344556644', name: 'clientsData.language1_id' } })

    console.log(
      wrapper
        .find('input')
        .at(6)
        .props()
    )

console.log 截图:

屏幕截图 2019 年 5 月 29 日上午 9 点 59 分 59 秒

上面的控制台日志屏幕截图显示,即使在模拟更改后,值也没有改变。

标签: javascriptreactjsjestjsenzymeformik

解决方案


我能够通过直接使用 props.onChange 来修复它

wrapper
      .find('SelectInput')
      .at(0)
      .props()
      .onChange({ target: { id: 1, value: 'American Sign Language', name: 'clientsData.language1_id' } })
    wrapper.update()

推荐阅读