Тестирование перенаправления React Router с помощью async componentDidMount - PullRequest
0 голосов
/ 04 декабря 2018

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

Я чувствую, что у меня очень тяжелая погода из-за этого.Какой правильный подход здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...