我试图弄清楚如何使用测试来断言当前位置路径名是什么。

作为实验and based on some docs,我编写了以下测试

  test(`Can navigate MemoryRouter`, (done) => {
    const logAll = (p, ...args) => {
      console.log(`SOME OUTPUT`,p, ...args)
      return p.location.pathname
    }

    const div = document.createElement('div')

    const Test = () => (
      <MemoryRouter>
        <React.Fragment>
          <Link to="/foo/bar" id="click-me" />
          <Route render={logAll} />
        </React.Fragment>
      </MemoryRouter>
    )
    ReactDOM.render(React.createElement(Test), div)
    console.log('click')
    Simulate.click(div.querySelector('#click-me'))
  })


我期望,因为logAll路由会匹配所有更改,以便它在/上记录一次(它确实记录),然后在/foo/bar上再次记录。但是后者永远不会在测试超时(约5秒)之前记录日志。

我想念什么?

最佳答案

您的测试还可以(您甚至不需要done),但是错过了Simulate.click的第二个参数。如果添加它,它将按预期工作:

Simulate.click(
    div.querySelector('#click-me'),
    { button: 0 }
);


查看the codebase显示Link不会继续进行没有button=0事件的点击。

Blame of this line,表示Link tracks only left button click

09-11 19:01
查看更多