【问题标题】:Testing React-Router v1.0.0 href测试 React-Router v1.0.0 href
【发布时间】:2015-10-30 11:50:03
【问题描述】:

目前使用 Jest 和 React-Router 来尝试测试一个元素的 href 是否具有预期值。

按照说明here

jest.dontMock('../BasicPage')

describe('BasicPage', function() {
  let BasicPage = require('../BasicPage')
  let TestUtils = require('react-addons-test-utils')
  let ReactDOM = require('react-dom')
  let React = require('react')

  it('renders the Login button if not logged in', function() {
    let page = TestUtils.renderIntoDocument(<BasicPage />)
    let button = TestUtils.findRenderedDOMComponentWithTag(page, 'button')
    expect(ReactDOM.findDOMNode(button).textContent).toBe('Login')
  })

  it('renders the Account button if logged in', function() {
    let page = TestUtils.renderIntoDocument(<BasicPage authenticated={true} />)
    let button = TestUtils.findRenderedDOMComponentWithTag(page, 'button')
expect(ReactDOM.findDOMNode(button).getAttribute('href')).toBe('/admin')
  })
})

该元素有如下链接:

<Button bsStyle="primary"><Link to="/admin">Login</Link></Button>

当 console.log'in 按钮时 href 不存在并且测试返回 null!

有没有人找到解决这个问题的方法?

【问题讨论】:

    标签: javascript reactjs react-router


    【解决方案1】:

    如果需要,您需要在 &lt;Router&gt; 实例下渲染内容,例如&lt;Link&gt;s 实际工作。 &lt;Router&gt; 提供了 &lt;Link&gt; 用于生成 hrefs 和处理点击的上下文的历史实例。

    为了方便测试,我们将允许您在没有历史实例的情况下渲染&lt;Link&gt;s,但正如您所见,它们将不起作用。

    【讨论】:

    • 导入react-router后你会这样做吗?
    【解决方案2】:

    expect(ReactDOM.findDOMNode(button).getAttribute('href')).toBe('/admin')

    这不是找错了吗?你不想找到锚吗?

    【讨论】:

    • @JimmyJia 能够看到将元素包装在 -> -> 中所需的 href 属性是正确的。当通过 componentDidMount 上的函数处理 url 时,这对于某些用户案例很有用。但是正如您在推文中提到的,我们的用户案例是在我们尝试替换集成测试时检查链接显示正确的组件。您会说将其移至单元测试是明智的选择吗?
    猜你喜欢
    • 1970-01-01
    • 2015-12-22
    • 2016-02-20
    • 2016-08-03
    • 2018-08-23
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多