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

react-router – 在具有动态道具的同时测试链接组件的href值

发布时间:2020-12-15 16:19:03 所属栏目:百科 来源:网络整理
导读:我正在寻找一个解决方案,以便仍然可以使用来自react-router的链接,而不是在测试href属性值时. 实际上,我有一些根据上下文改变路线的组件.但是,当我测试href属性值时,返回的唯一内容是null. 但是,当我使用a时,它会返回预期值. 这是一个失败的测试: import Re
我正在寻找一个解决方案,以便仍然可以使用来自react-router的链接,而不是在测试href属性值时.
实际上,我有一些根据上下文改变路线的组件.但是,当我测试href属性值时,返回的唯一内容是null.
但是,当我使用a时,它会返回预期值.

这是一个失败的测试:

import React from 'react';
import {Link} from 'react-router';
import TestUtils from 'react-addons-test-utils';
import expect from 'must';

const LINK_LOCATION = '/my_route';

class TestComponent extends React.Component {

    render() {
        return (
            <div>
                <Link className='link' to={LINK_LOCATION}/>
                <a className='a' href={LINK_LOCATION}/>
            </div>
        );
    }
}

describe('Url things',() => {
    it('should return me the same href value for both link and a node',() => {
        const test_component = TestUtils.renderIntoDocument(<TestComponent/>);
        const link = TestUtils.findRenderedDOMComponentWithClass(test_component,'link');
        const a = TestUtils.findRenderedDOMComponentWithClass(test_component,'a');
        expect(link.getAttribute('href')).to.eql(a.getAttribute('href'));
    });
});

输出:AssertionError:null必须等效于“/ my_route”

来自React-router的知道人员回答看他们如何测试Link,但是他们没有可以改变href属性值的动态上下文.

所以我做了类似的事情:

class ComponentWrapper extends React.Component {
    constructor(props) {
        super(props);
        this.state = {};
    }

    set_props(props) {
        this.setState({props});
    }

    render() {
        if (this.state.props) {
            return <Component {...this.state.props}/>;
        }
        return null;
    }
}

但是现在,从我的组件助手:

render_into_document() {
    const full_component_props = {
        location: this.location,widget_categories: this.widget_categories
    };
    node = document.createElement('div');
    this.component = render((
        <Router history={createHistory('/')}>
            <Route path='/' component={ComponentWrapper} />
        </Router>
    ));
    this.component.set_props(full_component_props);
    return this;
}

我不能把手放在this.component上以改变道具.我怎么能这样做?

解决方法

我只是看了 how react-router tests <Link />并为我的案例提出了这个问题:

import test from 'ava'
import React from 'react'
import { render } from 'enzyme'
import { Router,Route } from 'react-router'
import createHistory from 'history/lib/createMemoryHistory'
import SkipToXoom from '../skip-to-xoom'


test('the rendered button redirects to the proper URL when clicked',t => {
    const toCountryData = { countryName: 'India',countryCode: 'IN' }
    const div = renderToDiv({ toCountryData,disbursementType: 'DEPOSIT',userLang: 'en_us' })
    const { attribs: { href } } = div.find('a')[0]
    t.true(href.includes(encodeURIComponent('receiveCountryCode=IN')))
    t.true(href.includes(encodeURIComponent('disbursementType=DEPOSIT')))
    t.true(href.includes(encodeURIComponent('languageCode=en')))
})

/**
 * Render the <SkipToXoom /> component to a div with the given props
 * We have to do some fancy footwork with the Router component to get
 * the Link component in our SkipToXoom component to render out the href
 * @param {Object} props - the props to apply to the component
 * @returns {Element} - the div that contains the element
 */
function renderToDiv(props = {}) {
    return render(
        <Router history={createHistory('/')}>
            <Route path="/" component={() => <SkipToXoom {...props} userLang="en" />} />
        </Router>
    )
}

我希望这对你有所帮助!

(编辑:李大同)

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

    推荐文章
      热点阅读