reagire-router devo abbastanza semplice reagiscono componente (Link involucro che aggiunge classe 'attiva' se percorso è attivo):Come deridere contesto
import React, { PropTypes } from 'react';
import { Link } from 'react-router';
const NavLink = (props, context) => {
const isActive = context.router.isActive(props.to, true);
const activeClass = isActive ? 'active' : '';
return (
<li className={activeClass}>
<Link {...props}>{props.children}</Link>
</li>
);
}
NavLink.contextTypes = {
router: PropTypes.object,
};
NavLink.propTypes = {
children: PropTypes.node,
to: PropTypes.string,
};
export default NavLink;
Come dovrei provarlo? Il mio unico tentativo è stato:
import NavLink from '../index';
import expect from 'expect';
import { mount } from 'enzyme';
import React from 'react';
describe('<NavLink />',() => {
it('should add active class',() => {
const renderedComponent = mount(<NavLink to="/home" />, { router: { pathname: '/home' } });
expect(renderedComponent.hasClass('active')).toEqual(true);
});
});
non funziona e restituisce TypeError: Cannot read property 'isActive' of undefined
. Ha sicuramente bisogno di un po 'di derisione del router, ma non ho idea di come scriverlo.
Si noti che le parentesi intorno al "contesto" sono passate in profondità - mi mancavano inizialmente e mi ci è voluto un po 'per capire perché non funzionava! –