Как я могу смонтировать компонент Redux и шутка - PullRequest
0 голосов
/ 13 апреля 2020
import React from 'react';
import { Breadcrumb as AntBreadcrumb, Breadcrumb } from 'antd';
import './breadcrumb.scss';
import { Link, withRouter, RouteComponentProps } from 'react-router-dom';
import { updateBreadcrumb } from './../../../redux/actions/baseLayout';
import { connect } from 'react-redux';
import { HomeOutlined, RightOutlined } from '@ant-design/icons';
interface NewProps {
  breadcrumb: any;
}
type Props = NewProps & RouteComponentProps<{}>;

// @TODO
class Render extends React.Component<Props> {
  state = {
    routes: [{ path: '', breadcrumbName: '' }]
  };
  // eslint-disable-next-line react/no-deprecated
  componentWillReceiveProps(nextProps: any) {
    this.setState({
      routes: this.props.breadcrumb
    });
  }
  componentDidMount = () => {
    this.setState({
      routes: this.props.breadcrumb
    });
  };
  itemRender = (route: any, params: any, routes: any, paths: any) => {
    const last = routes.indexOf(route) === routes.length - 1;
    return last ? (
      <span>{route.breadcrumbName}</span>
    ) : (
      <Link to={paths.join('/')}>{route.breadcrumbName}</Link>
    );
  };
  shouldComponentUpdate = () => {
    return true;
  };
  componentDidUpdate = (prevProps: RouteComponentProps) => {
    if (prevProps !== this.props) {
      this.setState({
        routes: this.props.breadcrumb
      });
    }
  };
  render() {
    return (
      <div style={{ color: 'red' }}>
        <Breadcrumb
          style={{ fontWeight: 600, fontSize: '15px', color: 'black' }}
          separator={
            <RightOutlined
              style={{ transform: 'scalex(0.7)', fontSize: '16px' }}
            />
          }
        >
          {this.state.routes.map((route, index) => {
            return (
              <Breadcrumb.Item key={index} href={`${route.path}`}>
                {`${route.breadcrumbName}`}
                {/* <HomeOutlined /> */}
              </Breadcrumb.Item>
            );
          })}
        </Breadcrumb>
      </div>
    );
  }
}

const mapDispatchToProps = {
  updateBreadcrumb: updateBreadcrumb
};
const mapStateToProps = (state: any) => {
  return {
    breadcrumb: state.breadcrumb.breadcrumb || []
  };
};

export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Render));

выше кода, я хотел написать тестовый пример, но я не смог смонтировать его, я пытался смонтировать его с помощью только, но он не создает снимок, он дает неудачный тестовый пример, пожалуйста, направьте меня в правильном направлении или некоторые документы, я действительно новичок в ракте, и моя компания дала мне это задание написать контрольный пример, но я нигде не нахожу никаких соответствующих документов.

import React from 'react';
import Enzyme, { shallow, mount } from 'enzyme';
import Componnent from '../breadcrumb';
import { BrowserRouter as Router } from 'react-router-dom';
import configureStore from 'redux-mock-store'; //ES6 modules
import { Provider } from 'react-redux';
import thunk from 'redux-thunk';
import renderer from 'react-test-renderer';
import Adapter from 'enzyme-adapter-react-16';

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

const setUp = (initprops:any) => {
    const wrapper = mount(<Router><Provider store={initprops}><Componnent /></Provider></Router>);
    return wrapper;
};
    describe('Login Component', () => {
        const middlewares = [thunk];
        const mockStore = configureStore(middlewares);
        const initialState = {};
        const props = mockStore(initialState);

        let wrapper:any,instancewrapper:any;
        beforeEach(() => {
            wrapper = setUp(props); 
            instancewrapper = wrapper.instance();
        });

        it('should render correctly', () => {
            const tree = renderer.create(<Router><Provider store={props}><Componnent /></Provider></Router>).toJSON();
            expect(tree).toMatchSnapshot();
        });

    });

1 Ответ

0 голосов
/ 13 апреля 2020

Вы все еще можете shallow визуализировать компонент и использовать функцию .dive(), чтобы развернуть основной компонент.

...