使用 Enzyme 测试样式组件
Test styled-components with Enzyme
我有一个关于用酶进行测试的问题,所以基本上我正在做的事情看起来像:
const BaseButton = styled.button`
padding: 10px;
`;
const PrimaryButton = BaseButton.extend`
color: red;
`;
const SecondaryButton = BaseButton.extend`
color: blue;
`;
// My actual component:
const buttonTypes = {
primary: PrimaryButton,
secondary: SecondaryButton
};
export const Button = (props: Props) => {
const { type = 'primary' } = props;
const Btn = buttonTypes[type] || buttonTypes.primary;
return (
<Btn
{...props}
onClick={props.onClick}
>
{props.children}
</Btn>
);
};
我想用 Enzyme 在 type
上传递不同的 props 做一些测试,例如测试应该像这样:
should render a Primary button if type='primary'
should render a Secondary button if type='secondary'
should render a Primary button if type=''
should render a Primary button by default
我的按钮有更多的属性,但为了简单起见,我只显示了 color
。
关于如何实现该目标的任何想法?
我最后做的是:
- 向按钮添加数据属性
- 使用 Enzyme 安装组件
- 安装后我使用
component.html()
将组件作为字符串
- 检查是否应用了正确的属性
// Button.js
const buttons = {
primary: 'primary',
secondary: 'secondary'
};
export const ButtonStyles = styled.button.attrs({
'data-button-type': props => buttons[props.type] || buttons.primary
})`
padding: 10px;
`;
// Button.tests.js
it('should render a primary button when type prop is missing', () => {
const wrapper = mount(
<Button
{...defaultProps}
type=""
/>
);
expect(wrapper.html().includes('data-button-type="primary"')).toBeTruthy();
});
我有一个关于用酶进行测试的问题,所以基本上我正在做的事情看起来像:
const BaseButton = styled.button`
padding: 10px;
`;
const PrimaryButton = BaseButton.extend`
color: red;
`;
const SecondaryButton = BaseButton.extend`
color: blue;
`;
// My actual component:
const buttonTypes = {
primary: PrimaryButton,
secondary: SecondaryButton
};
export const Button = (props: Props) => {
const { type = 'primary' } = props;
const Btn = buttonTypes[type] || buttonTypes.primary;
return (
<Btn
{...props}
onClick={props.onClick}
>
{props.children}
</Btn>
);
};
我想用 Enzyme 在 type
上传递不同的 props 做一些测试,例如测试应该像这样:
should render a Primary button if type='primary'
should render a Secondary button if type='secondary'
should render a Primary button if type=''
should render a Primary button by default
我的按钮有更多的属性,但为了简单起见,我只显示了 color
。
关于如何实现该目标的任何想法?
我最后做的是:
- 向按钮添加数据属性
- 使用 Enzyme 安装组件
- 安装后我使用
component.html()
将组件作为字符串 - 检查是否应用了正确的属性
// Button.js
const buttons = {
primary: 'primary',
secondary: 'secondary'
};
export const ButtonStyles = styled.button.attrs({
'data-button-type': props => buttons[props.type] || buttons.primary
})`
padding: 10px;
`;
// Button.tests.js
it('should render a primary button when type prop is missing', () => {
const wrapper = mount(
<Button
{...defaultProps}
type=""
/>
);
expect(wrapper.html().includes('data-button-type="primary"')).toBeTruthy();
});