Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用props和HOC测试组件_Reactjs_Redux_Jestjs_React Testing Library - Fatal编程技术网

Reactjs 使用props和HOC测试组件

Reactjs 使用props和HOC测试组件,reactjs,redux,jestjs,react-testing-library,Reactjs,Redux,Jestjs,React Testing Library,所有组件都具有相同的结构。组件本身的组件、redux的HOC索引和材质UI样式的类。我的问题是如何正确地测试它,因为很明显,每个组件都是用compose和connect包装的,如下面所示。我想用Jest和React测试库来测试它,但到目前为止,我所做的只是简单的单元和快照测试,在这里我甚至不确定应该如何开始——我应该创建一个包装器吗?那样的话我该怎么办?如何使用代码中描述的HOC和props导入组件 --component name --component.tsx --index.t

所有组件都具有相同的结构。组件本身的组件、redux的HOC索引和材质UI样式的类。我的问题是如何正确地测试它,因为很明显,每个组件都是用compose和connect包装的,如下面所示。我想用Jest和React测试库来测试它,但到目前为止,我所做的只是简单的单元和快照测试,在这里我甚至不确定应该如何开始——我应该创建一个包装器吗?那样的话我该怎么办?如何使用代码中描述的HOC和props导入组件

--component name
   --component.tsx
   --index.tsx
   --classes.tsx
组件.tsx

import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
import Typography from '@material-ui/core/Typography';
import { ClassNameMap } from '@material-ui/styles';
import React, { FC } from 'react';
import { NavLink } from 'react-router-dom';
import { GtagServiceInterface } from '../../../shared/services/gtag-service';
import TopBarFeedbackIcon from '../top-bar-feedback-icon';
import TopBarSwitch from '../top-bar-switch';
import { TopBarServiceInterface } from './service';

const Component: FC<Props> = ({ classes, gtagService, service }) => {
  const onClick = () => gtagService.headerLogo();

  return (
    <div className={classes.root}>
      <AppBar id="app-bar" position="static" className={classes.appBar}>
        <Toolbar variant="dense" className={classes.toolbar}>
          <NavLink to="/dashboard" className={classes.navLink} onClick={onClick}>
            <img src={service.logo()} alt="logo.svg" className={classes.logo} />
          </NavLink>
          <Typography variant="h6" className={classes.title}>
            <NavLink to="/dashboard" className={classes.navLink}>
              Admin Dashboard
            </NavLink>
          </Typography>
          <TopBarSwitch />
          <TopBarFeedbackIcon />
        </Toolbar>
      </AppBar>
    </div>
  );
};

interface Props {
  classes: Partial<ClassNameMap>;
  gtagService: GtagServiceInterface;
  service: TopBarServiceInterface;
}

export default Component;
/* istanbul ignore file */
import { compose } from 'redux';
import withMaterialUiClasses from '../../../shared/higher-order-components/with-material-ui-classes';
import withProps from '../../../shared/higher-order-components/with-props';
import gtagService from '../../../shared/services/gtag-service';
import classes from './classes';
import TopBar from './component';
import service from './service';

export default compose(withProps({ gtagService, service }), withMaterialUiClasses(classes))(TopBar);