У меня есть простая форма в качестве компонента React. После нажатия кнопки вызывается handleSubmit (), который выполняет обратный вызов и очищает форму, если вызов был успешным. Я попытался сделать юнит-тест Jest, который проверяет, очищается ли форма после отправки.
it('handles form submission', () => {
Amplify.API.post = jest.fn().mockImplementation(() => Promise.resolve());
EventEmitter.emit = jest.fn().mockImplementation(() => Promise.resolve());
wrapper.setState({
diocese: {
name: 'My New Diocese',
id: '123',
generalCollectionOnly: false,
aggregatePayments: false,
aggregatePledges: false,
},
});
footer.children().find(Button).at(1)
.simulate('click');
expect(wrapper.state().diocese.name).toEqual('');
});
После отладки я вижу, что форма успешно отправлена и вызывает this.setState ():
this.setState(() => ({
diocese: {
id: '',
name: '',
generalCollectionOnly: false,
aggregatePledges: false,
aggregatePayments: false,
},
isLoading: false,
}));
Тем не менее, оператор wait не выполняется, потому что в имени по-прежнему отображается «Моя новая епархия», хотя его следует очистить. Проведя некоторые исследования, я подумал, что обновление обертки поможет:
wrapper.update();
Однако это все еще показывает, что состояние компонента не было очищено. Почему состояние не обновляется в тесте?