我有一個噩夢找到測試React路由器鏈接的一個很好的解決方案。它正在傳遞'正確呈現類別',但是零鏈接正在通過測試,我已經嘗試了很多不同的東西,但仍然無處可尋。測試帶鏈接的反應路由器
下面是什麼,我想測試:
組件
import React from 'react';
import { Link } from 'react-router';
class Categories extends React.Component {
constructor(props, context){
super(props);
context.router
}
render() {
return (
<nav className="categories">
<ul>
<li><Link to="devices">Devices</Link></li>
<li><Link to="cases">Cases</Link></li>
<li><Link to="layouts">Layouts</Link></li>
<li><Link to="designs">Designs</Link></li>
</ul>
</nav>
);
}
}
Categories.contextTypes = {
router: React.PropTypes.func.isRequired
};
export default Categories;
StubRouterContext
import React from 'react';
import objectAssign from 'object-assign';
var stubRouterContext = (Component, props, stubs) => {
function RouterStub() { }
objectAssign(RouterStub, {
makePath() {},
makeHref() {},
transitionTo() {},
replaceWith() {},
goBack() {},
getCurrentPath() {},
getCurrentRoutes() {},
getCurrentPathname() {},
getCurrentParams() {},
getCurrentQuery() {},
isActive() {},
getRouteAtDepth() {},
setRouteComponentAtDepth() {}
}, stubs)
return React.createClass({
childContextTypes: {
router: React.PropTypes.func,
routeDepth: React.PropTypes.number
},
getChildContext() {
console.log('blah');
return {
router: RouterStub,
routeDepth: 0
};
},
render() {
return <Component {...props} />
}
});
};
export default stubRouterContext;
組件測試
var expect = require('chai').expect;
var React = require('react/addons');
var Categories = require('../app/src/js/components/Categories.React.js');
var stubRouterContext = require('../test-utils/stubRouterContext.js');
var TestUtils = React.addons.TestUtils;
describe('Categories', function() {
var categoriesWithContext = stubRouterContext(Categories);
it('renders Categories properly', function() {
var categories = TestUtils.renderIntoDocument(<categoriesWithContext />, {});
});
it('renders 4 links', function() {
var catLinks = TestUtils.scryRenderedDOMComponentsWithTag(categoriesWithContext, 'a');
expect(catLinks).to.have.length(4);
});
});