tl / dr: как мне ожидать асинхронного componentDidMount
, имитировать перенаправление React Router и проверить полученную страницу?
У меня есть компонент React с componentDidMount
который асинхронно запрашивает данные у API, а затем устанавливает состояние.
В моих тестах на фермент / мокко я могу ждать componentDidMount
следующим образом:
it('should show an input with quantity 0 by default', async () => {
const component = shallow(<ShowPage />);
await component.instance().componentDidMount();
component.update();
expect(component.find('h1').text()).to.eq('Show page');
});
Это нормально, но ятакже хотите проверить нажатие кнопки, которая перенаправляет пользователя на другую страницу.Используется:
this.props.history.push('/redirect-to')
Пропеллер history
недоступен, пока я не заверну компонент в MemoryRouter
:
const component = mount(<MemoryRouter><ShowPage /></MemoryRouter>);
Но теперь я не могу получить доступ к ShowPage
component's componentDidMount
, потому что:
await component.find('BurgerShow').instance().componentDidMount();
получает меня:
instance() can only be called on the root
Я чувствую, что у меня очень тяжелая погода из-за этого.Какой правильный подход здесь?