测试反应最终形式的变化事件

时间:2019-07-24 12:59:45

标签: reactjs enzyme react-final-form

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

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

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');
});

此测试失败了:

    Expected value to equal:
      "blue cheese"
    Received:
      ""

2 个答案:

答案 0 :(得分:0)

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

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 :(得分:0)

我对酶了解不多。库本身使用@testing-library/react(我强烈建议)进行测试,changefired with fireEvent.change()