如何用酶测试反应路由器

Zha*_* Yi 22 mocha.js chai reactjs react-router enzyme

我正在使用酶+ mocha + chai来测试我的react-redux项目.酶提供浅层测试组分行为.但我没有找到测试路由器的方法.我正在使用react-router如下:

<Router history={browserHistory}>
     ...
        <Route path="nurse/authorization" component{NurseAuthorization}/>
     ...
  </Route>
Run Code Online (Sandbox Code Playgroud)

我想测试这条路线nurse/authorization参考NurseAuthorization组件.如何在reactjs项目中测试它?

EDIT1

react-router用作路由器框架.

Fre*_*eez 19

您可以将路由器包装在组件中以进行测试.

Routes.jsx

export default props => (
  <Router history={browserHistory}>
    ...
    <Route path="nurse/authorization" component{NurseAuthorization}/>
    ...
  </Route>
)
Run Code Online (Sandbox Code Playgroud)

index.js

import Routes from './Routes.jsx';
...

ReactDOM.render(<Routes />, document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)

然后,您必须浅显示Routes组件,并且您可以创建对象图以检查路径和相关组件之间的对应关系.

Routes.test.js

import { shallow } from 'enzyme';
import { Route } from 'react-router';
import Routes from './Routes.jsx';
import NurseAuthorization from './NurseAuthorization.jsx';

it('renders correct routes', () => {
  const wrapper = shallow(<Routes />);
  const pathMap = wrapper.find(Route).reduce((pathMap, route) => {
    const routeProps = route.props();
    pathMap[routeProps.path] = routeProps.component;
    return pathMap;
  }, {});
  // { 'nurse/authorization' : NurseAuthorization, ... }

  expect(pathMap['nurse/authorization']).toBe(NurseAuthorization);
});
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但是要注意,因为它不能直接使用`render`而不是`component`来处理:`&lt;Route path =“ ...” render = {props =&gt; &lt;YourComponent {... props} /&gt;} /&gt;` (2认同)