我有一个带样式的组件,它包装了带有某些样式的输入复选框元素。在我的应用中,默认情况下可能已选中此复选框。这是一些组件代码:
const InputCheckbox = styled.input.attrs((props) => ({
id: props.id,
type: 'checkbox',
checked: props.checked
}))`
visibility: hidden;
&:checked + label {
background-color: ${(props) => props.theme.mainColor};
border-color: ${(props) => props.theme.mainColor};
&:after {
border-left: 2px solid #fff;
border-bottom: 2px solid #fff;
}
}
`;
function Checkbox(props) {
return (
<CheckboxContainer>
<InputCheckbox
id={props.id}
checked={props.checked}
onChange={(event) => {
props.onChange(event.target.checked);
}}
/>
<CheckboxLabel id={props.id} />
</CheckboxContainer>
);
}
我正在使用Jest和Enzyme进行测试,但找不到任何有关如何深入到您的Enzyme浅层包装中以检查InputCheckbox内的输入的checked属性为true的信息。例如:
describe('Checkbox', () => {
const mockProps = {
id: 'settings-user',
checked: true,
onComplete: (id) => jest.fn(id)
};
const component = shallow(<Checkbox {...mockProps}/>);
describe('on initialization', () => {
it('Input should be checked', () => {
const inputCheckbox = component.find('InputCheckbox');
expect(inputCheckbox.props().checked).toBe(true);
});
});
});
此测试失败,因为.find()
找不到任何节点。
答案 0 :(得分:1)
您需要设置显示名称以供其使用:
InputCheckbox.displayName = 'InputCheckbox';
之后尝试
component.find('InputCheckbox')
为方便起见,请使用babel plugin。
也尝试将find与组件构造函数一起使用。
import InputCheckbox from 'path-to-component';
...
const inputCheckbox = component.find(InputCheckbox);