Enzyme如何测试所有匹配选择器的checkbox均处于选中状态?
Enzyme批量校验checkbox选中状态解决方案
你不需要手动写循环实现校验,Enzyme本身提供了内置方法可以直接满足需求。
你写的all().props().checked写法无法生效,原因是all()返回的是匹配到的ReactWrapper实例数组,数组本身没有props()方法,必须单独调用每个实例的方法才能拿到对应属性。
推荐方案:使用Enzyme内置的everyWhere方法
everyWhere是Enzyme为节点集合提供的原生API,会校验所有匹配节点是否都满足回调函数中的判断条件,写法如下:
// 先拿到目标checkbox集合 const targetCheckboxes = wrapper.find('.my-element').at(1).find('input[type="checkbox"]'); // 校验所有checkbox的checked属性都为true expect(targetCheckboxes.everyWhere(checkbox => checkbox.props().checked)).toBe(true);
该方法会自动遍历所有匹配到的节点,只要有一个节点不满足条件就会返回false,完全不需要手动指定索引或者写循环逻辑。如果需要校验是否至少有一个节点满足条件,也可以用同系列的someWhere方法实现。
替代方案:配合Jest匹配器实现
如果需要更灵活的校验逻辑,也可以先把所有选中状态提取成数组,再用Jest的数组匹配器校验:
const targetCheckboxes = wrapper.find('.my-element').at(1).find('input[type="checkbox"]'); const checkedStatusList = targetCheckboxes.map(item => item.props().checked); // 校验所有值都是true expect(checkedStatusList).toEqual(Array(targetCheckboxes.length).fill(true));
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

