用 Enzyme 测试 styled-components
Posted
技术标签:
【中文标题】用 Enzyme 测试 styled-components【英文标题】:Test styled-components with Enzyme 【发布时间】:2017-11-01 02:18:35 【问题描述】:我有一个关于酶测试的问题,所以基本上我正在做的事情是这样的:
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
。
关于如何实现这一目标的任何想法?
【问题讨论】:
【参考方案1】:我最终做的是:
-
为按钮添加数据属性
使用 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();
);
【讨论】:
以上是关于用 Enzyme 测试 styled-components的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Jest 和/或 Enzyme 测试由 React 组件呈现的样式和媒体查询
用 Jest 和 Enzyme 测试 React Router
React / Enzyme:运行 Jest / Enzyme 测试时出现 Invariant Violation 错误
在使用Jest和Enzyme编写的测试用例中,道具不会传递到组件内部