单元测试 – 使用Link测试React路由器
发布时间:2020-12-15 05:07:16 所属栏目:百科 来源:网络整理
导读:我正在寻找一个噩梦,找到一个测试React Router链接的好方法.它正在传递’渲染类别正确’但是零链接正在通过测试,我已经尝试了很多不同的东西,但仍然无处可去. 以下是我要测试的内容: 零件 import React from 'react';import { Link } from 'react-router';c
我正在寻找一个噩梦,找到一个测试React Router链接的好方法.它正在传递’渲染类别正确’但是零链接正在通过测试,我已经尝试了很多不同的东西,但仍然无处可去.
以下是我要测试的内容: 零件 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); }); });
我有完全相同的问题.在react-router的最新版本中,您不需要上下文来呈现链接元素,因此这不是问题.但是,如果你像我一样停留在API 1.0之前的版本,那么stubRouterContext方法效果很好.
OP和我发现我们的包装器呈现为空的唯一原因是使用了camelCase组件名称. var categoriesWithContext = stubRouterContext(Categories);变成var CategoriesWithContext = stubRouterContext(Categories);. Therfore var categories = TestUtils.renderIntoDocument(< categoriesWithContext />,{});成为var categories = TestUtils.renderIntoDocument(< CategoriesWithContext />,{});. 这种方法的解释在这里 – https://gist.github.com/sebmarkbage/f1f4ba40816e7d7848ad. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |