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> ) } 我希望这对你有所帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |