有人能告诉我如何测试这个简单的行为吗?我已经尝试了很长时间来解决这个问题,我希望我只是遗漏了一些东西,因为更改事件应该很容易测试。
我尝试调用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:
""发布于 2019-07-24 21:36:12
我认为您可能需要向输入添加一个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)。
类似的问题请看这里:
发布于 2019-07-24 23:31:36
我对酶了解不多。这个库本身是使用@testing-library/react (我强烈推荐)进行测试的,它的change是fired with fireEvent.change()。
https://stackoverflow.com/questions/57183579
复制相似问题