首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试react-final-form更改事件

测试react-final-form更改事件
EN

Stack Overflow用户
提问于 2019-07-24 20:59:46
回答 2查看 1.9K关注 0票数 3

有人能告诉我如何测试这个简单的行为吗?我已经尝试了很长时间来解决这个问题,我希望我只是遗漏了一些东西,因为更改事件应该很容易测试。

我尝试调用onChange而不是simulatewrapper.update()await new Promise(resolve => setTimeout(resolve))没有结果。

代码语言:javascript
复制
import * as React from 'react';
import { Form, Field } from 'react-final-form';
import { mount } from 'enzyme';


it('change event', () => {
  const wrapper = mount(
    <Form onSubmit={jest.fn()}>
    {() => (
      <Field name="name">
      {({input}) => <input value={input.value} onChange={input.onChange} />}
      </Field>
    )}
    </Form>
  )

  expect(wrapper.find('input').prop('value')).toEqual('');
  wrapper.find('input').simulate('change', { target: { value: 'blue cheese' } } );
  expect(wrapper.find('input').prop('value')).toEqual('blue cheese');
});

这个测试失败得很糟糕:

代码语言:javascript
复制
    Expected value to equal:
      "blue cheese"
    Received:
      ""
EN

回答 2

Stack Overflow用户

发布于 2019-07-24 21:36:12

我认为您可能需要向输入添加一个ref,并直接在其上模拟事件:

代码语言:javascript
复制
it('change event', () => {
  const wrapper = mount(
    <Form onSubmit={jest.fn()}>
    {() => (
      <Field name="name">
      {({input}) => <input ref='myinput' value={input.value} onChange={input.onChange} />}
      </Field>
    )}
    </Form>
  )
  wrapper.ref('myinput').simulate('change', { target: { value: 'blue cheese' } } );
}

编辑:

但是,您需要确保input.onChange函数实际使用该事件值并最终更改input.value (可能通过setState)。

类似的问题请看这里:

Enzyme simulate an onChange event

票数 1
EN

Stack Overflow用户

发布于 2019-07-24 23:31:36

我对酶了解不多。这个库本身是使用@testing-library/react (我强烈推荐)进行测试的,它的changefired with fireEvent.change()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57183579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档