Как протестировать реактивный маршрутизатор с ферментом

Я использую фермент + мокка + чай для тестирования моего проекта реакция-редукция. Фермент обеспечивает неглубокое тестирование поведения компонентов. Но я не нашел способ проверить маршрутизатор. Я использую реактивный маршрутизатор, как показано ниже:

<Router history={browserHistory}>
     ...
        <Route path="nurse/authorization" component{NurseAuthorization}/>
     ...
  </Route>

Я хочу проверить этот маршрут nurse/authorization на ссылку NurseAuthorization. Как протестировать его в проекте reactjs?

EDIT1

Я использую react-router как структуру маршрутизатора.

Ответ 1

Вы можете обернуть свой маршрутизатор внутри компонента, чтобы проверить его.

Routes.jsx

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

index.js

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

ReactDOM.render(<Routes />, document.getElementById('root'));

Затем вы должны выполнить мелкий рендеринг своего компонента 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);
});

Ответ 2

У меня были мои пути, определенные в другом файле для динамического маршрутизатора, поэтому я также тестирую, что все маршруты, которые я передаю как Маршруты, определены в моих paths.js константах:

it('Routes should only have paths declared in src/routing/paths.js', () => {
  const isDeclaredInPaths = (element, index, array) => {
    return pathsDefined.indexOf(array[index]) >= 0;
  }
  expect(routesDefined.every(isDeclaredInPaths)).to.be.true;
});