Reactjs 测试React组件时忽略HOC
我想测试一个简单的MaterialUI选择表单,它使用FormControl并以样式导出。我的测试用例非常简单,例如,我想断言我的组件呈现一个子组件。 我尝试以下断言: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
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只是因为我对它不太熟悉,不想尝试解决这方面的问题。