tl / dr:如何等待异步componentDidMount
,模拟React Router重定向并测试结果页面?
我有一个带有componentDidMount
的React组件,该组件从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
组件的componentDidMount
,因为:
await component.find('BurgerShow').instance().componentDidMount();
得到我:
instance() can only be called on the root
我觉得我的天气很恶劣。这里正确的方法是什么?