加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

单元测试 – 使用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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读