2017-01-08 2 views
11

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

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

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

EDIT1

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

ответ

7

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

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); 
}); 
+0

Я последовал за вашу инструкцию, но получил ошибку ниже на линии «сопзЬ обертке = неглубокой ();» - Объект не является конструктором (оценка «Компонент (publicProps, publicContext, updateQueue)») –

+0

BTW Я использую «реактивный маршрутизатор» –

+0

@ ZhaoYi Маршруты должны быть компонентом React (см. Routes.jsx) – Freez

0

я мои пути определены в другом файле для динамического маршрутизатора, поэтому я также тестирование, что все маршруты я рендеринга, как Маршруты определяются в моих путях .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; 
}); 
Смежные вопросы