Reactjs 测试React组件时忽略HOC

Reactjs 测试React组件时忽略HOC,reactjs,jestjs,material-ui,enzyme,Reactjs,Jestjs,Material Ui,Enzyme,我想测试一个简单的MaterialUI选择表单,它使用FormControl并以样式导出。我的测试用例非常简单,例如,我想断言我的组件呈现一个子组件。 我尝试以下断言: expect(wrapper.find('InputLabel')).toEqual(true); 但是,此断言失败的原因很简单,因为InputLabel被包装在WithStyles和WithFromControlContext中请参见调试输出: <WithStyles(FormControl) id="my-contr

我想测试一个简单的MaterialUI选择表单,它使用FormControl并以样式导出。我的测试用例非常简单,例如,我想断言我的组件呈现一个子组件。 我尝试以下断言:

expect(wrapper.find('InputLabel')).toEqual(true);
但是,此断言失败的原因很简单,因为InputLabel被包装在WithStyles和WithFromControlContext中请参见调试输出:

<WithStyles(FormControl) id="my-control-id">
      <WithStyles(WithFormControlContext(InputLabel)) htmlFor="my-control-id">
        My Control Label
      </WithStyles(WithFormControlContext(InputLabel))>
      ...
    </WithStyles(FormControl)>

有没有办法只测试InputLabel子级是否存在,而忽略它周围的所有HOC组件?

我是如何对HOCs中的组件进行这样的测试的,即我同时导出已包装的组件和未包装的组件

所以,我有

export class MyComponent extends React.Component {
  // All the code
}

export default withStyles(MyComponent);
因此,在我的测试中,我使用

import {MyComponent} from './MyComponent';
在我的代码中,我导入默认的导出

import MyComponent from './MyComponent';
除了wrapper.find之外,Enzyme还提供了-给它一个函数,它将返回渲染树中fnnode==true的每个节点

不要与wrapper.filterWhere混淆,它只查看当前包装器的节点,这意味着我可以告诉您直接的子节点

我为我当前的项目准备了这个实用程序:

const findWithStyles=包装器,名称=>{ //仅当两边都没有字母时匹配 //即:按钮、样式和样式ForwardRefButton //不是:我的按钮,按钮 常量matchExp=RegExp`{ const nodeName=node.name; //这里的额外检查是针对原始HTML文本,其.name为null 返回nodeName&&nodeName.matchexp; }; //或者,如果您的环境支持可选链接a?.b?.c: //返回wrapper.findWherenode=>node.name?.matchexp; }; const buttons=findWithStylesRapper,“按钮”;
不是真正的材料ui,但命名和默认导出可以使其更容易测试。这将有助于外部WithStyles,但是WithFromControlContext呢?如何在测试中装入组件?const shallow=createShallow{dive:true};常数包装=浅;这里有一个测试正常的代码沙盒:虽然我删除了TypeScript只是因为我对它不太熟悉,不想尝试解决这方面的问题。