有人可以告诉我如何测试这种简单的行为吗?我已经尝试了很多时间来解决这个问题,我希望我只是缺少一些东西,因为更改事件应该易于测试。
我尝试致电onChange
而不是simulate
,wrapper.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:
""
答案 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)。
有关类似问题,请参见此处:
答案 1 :(得分:0)
我对酶了解不多。库本身使用@testing-library/react
(我强烈建议)进行测试,change
是fired with fireEvent.change()
。