我有一个App
组件,其中包含主要路径定义:
export default function App() {
return (
<div>
<MuiThemeProvider theme={createMuiTheme(theme)}>
<Route
path={`${URL_PREFIX}/:module?/:id?`}
render={() => (<div>
<MapContainer />
<NavigationBox />
<FeedbackMessage />
</div>)}
/>
<Switch>
<Route
exact
path={URL_PREFIX}
render={() => (
<Redirect to={`${URL_PREFIX}/restaurants`} />
)}
/>
</Switch>
</MuiThemeProvider>
</div>
);
}
我有主文件,我有渲染功能,它在正确的HTML节点上呈现App
并将所有内容包装在其中:
const render = (messages) => {
ReactDOM.render(
<Provider store={store}>
<LanguageProvider messages={messages}>
<ConnectedRouter history={history}>
<App />
</ConnectedRouter>
</LanguageProvider>
</Provider>,
MOUNT_NODE
);
};
到目前为止一切正常。
我也尝试为App
编写测试,但这部分根本不起作用。这是我的测试文件:
describe('<App />', () => {
describe('should render other components on proper route', () => {
let renderedComponent;
beforeEach(() => {
renderedComponent = shallow(
<MemoryRouter initialEntries={[URL_PREFIX]} initialIndex={0}><App /></MemoryRouter>
).dive().dive();
});
it('should render <MapContainer />', () => {
expect(renderedComponent.find(MapContainer).length).toBe(1);
});
it('should render <NavigationBox />', () => {
expect(renderedComponent.find(NavigationBox).length).toBe(1);
});
it('should render <FeedbackMessage />', () => {
expect(renderedComponent.find(FeedbackMessage).length).toBe(1);
});
});
});
如果我添加更多.dive()
,我收到了错误消息:
TypeError: ShallowWrapper::dive() can not be called on Host Components
如果只有2次潜水或1次潜水,则表示预期值(1)与收到的(0)不同,因此测试失败。
如果我尝试使用render
或mount
抱怨,该商店是预期的,但价值未定义。
有没有办法测试我所选择的路径上是否呈现了我的组件?