简体   繁体   English

使用React Router进行酶集成测试测试-通过链接更新测试组件

[英]Enzyme integration testing testing with react router - testing components update with links

I would like to test that clicking on a link updates the components in my app. 我想测试单击链接是否可以更新我的应用程序中的组件。

Here's my app, when you click on about it renders the About component 这是我的应用程序,当您单击关于它时,将呈现“关于”组件

import React, { Component } from 'react';
import './App.css';
import {
  MemoryRouter as Router,
  Route,
  Link
} from 'react-router-dom'


const Home = () => <h1>home</h1>
const About = () => <h1>about</h1>

class App extends Component {
  render() {
    return (
      <Router>
        <ul>
          <li><Link to="/about">About</Link></li>
          <li><Link to="/">Home</Link></li>
        </ul>
        <Route exact path="/" component={Home}/>
        <Route path="/about" component={About}/>
      </Router>
    );
  }
}

export default App;

And here's my test: 这是我的测试:

import React from 'react';
import Adapter from 'enzyme-adapter-react-16';
import Enzyme from 'enzyme';
import { mount } from "enzyme";
import { MemoryRouter} from 'react-router-dom'
import App from './App';

Enzyme.configure({ adapter: new Adapter() });


// this test passes as expected
it('renders intitial heading as home', () => {
  const wrapper = mount(
    <App />
  );

  const pageHeading = wrapper.find("h1").first().text()
  expect(pageHeading).toEqual('home');
});

it('renders about heading when we navigate to about', () => {
  const wrapper = mount(
    <App />
  );

  const link = wrapper.find("Link").first();
  link.simulate('click');

  const pageHeading = wrapper.find("h1").first().text()
  expect(pageHeading).toEqual('about');
});

The second test fails: 第二项测试失败:

FAIL  src/App.test.js
  ● renders about heading when we navigate to about

    expect(received).toEqual(expected)

    Expected value to equal:
      "about"
    Received:
      "home"

I'm using react router v4, react 16 and enzyme 3.1 我正在使用反应路由器v4,反应16和酶3.1

Is it possible to test in this way using React Router and enzyme? 是否可以使用React Router和酶以这种方式进行测试?

Link's render function will check for event.button === 0 . 链接的渲染功能将检查event.button === 0 That's why check fails with enzyme if you call simulate without proper params. 这就是为什么如果您在没有适当参数的情况下调用simulate导致酶检查失败的原因。

Try link.simulate('click', { button: 0 }); 尝试link.simulate('click', { button: 0 });

Good luck. 祝好运。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM