【发布时间】:2018-08-29 00:24:27
【问题描述】:
我有这个简化的render() 方法:
render() {
return (
<React.Fragment>
<Router>
<div>
<Route path='/abc' component={Test} />
<Route path='/def' render={() => (
<div>Hello</div>
)} />
</div>
</Router>
</React.Fragment>
)
}
还有这个酶测试:
test('Render <Test> on /abc', () => {
const wrapper = mount(
<MemoryRouter initialEntries={['/abc']} >
<App />
</MemoryRouter>
);
console.log(wrapper.debug());
expect(wrapper.find(Test)).to.have.lengthOf(1);
});
但是,mount() 不会在/abc 路由上渲染组件Test,或在/def 路由上渲染<div>Hello</div>。
console.log(wrapper.debug()); 的输出:
<MemoryRouter initialEntries={{...}}>
<Router history={{...}}>
<App>
<BrowserRouter>
<Router history={{...}}>
<div>
<Route path="/abc" component={[Function: Test]} />
<Route path="/def" render={[Function: render]} />
</div>
</Router>
</BrowserRouter>
</App>
</Router>
</MemoryRouter>
如何测试该应用是否会在 /abc 路由上实际呈现 Test 组件?
【问题讨论】: