Я пытаюсь смоделировать вход, который вызывает функцию onValueChange
. Все работает отлично, за исключением одного реквизита, который установлен в customHandleChange
через setState
. Это изменение не отражается в объекте ShallowWrapper. Другие реквизиты работают просто отлично. Кажется, что состояние не обновляется на ShallowWrapper. Я нашел много тем, в которых говорилось, что update
или forceupdate
должны синхронизировать состояние, но это не так.
const wrapper = shallow(<EmployeeForm {...props} />).dive();
wrapper
.find('InnerForm')
.dive()
.find('[name="firstName"]')
.at(0)
.simulate('valueChange', { target: { name: 'firstName' }, detail: 'Max' });
await wrapper.instance().forceUpdate();
wrapper.update();
console.log(
wrapper
.find('InnerForm')
.dive()
.find('[name="firstName"]')
.at(0)
.props()
);
expect(
wrapper
.find('InnerForm')
.dive()
.find('[name="firstName"]')
.at(0)
.props().required
).toEqual(true);
});
<Input
name="firstName"
required={this.state.contactRequired}
onValueChange={customHandleChange}
/>
private customHandleChange = (event: CustomEvent<string>) => {
this.setState(
{
contactRequired: true,
},
() => this.forceUpdate()
);
}
Возможно ли синхронизировать состояние с объектом-оберткой?
Редактировать : Конечно, проблема в том, что props().required
остается ложным (по умолчанию) навсегда.