javascript - Jest + Styled Components - 嵌套组件上的 .toHaveStyleRule
问题描述
我有一个看起来像这样的组件:
import React, { ReactElement, useState } from 'react'
import styled from 'styled-components'
export const ExpandedView = styled.div`
@media (max-width: 768px) {
display: ${({ isExpanded }) => (isExpanded ? 'block' : 'none')};
}
`
const Card () => {
const [isExpanded, setExpanded] = useState(false)
return (
<div>
<button onClick={() => setExpanded(!isExpanded)} data-test="card-button">Open</button>
<ExpandedView isExpanded={isExpanded} data-test="expanded-view">
Expanded view content
</ExpandedView>
</div>
)
}
我想在 上测试该display
属性ExpandedView
,但是如果我尝试进行如下测试:
describe('Card', () => {
it('changes display', async () => {
const wrapper = mount(<Card />)
expect(wrapper.find('[data-test="expanded-view]')).toHaveStyleRule(
'display',
'none',
{
media: '(max-width: 768px)'
}
)
wrapper
.find('[data-test="card-button"]')
.first()
.childAt(0)
.simulate('click')
expect(wrapper.find('[data-test="expanded-view]')).toHaveStyleRule(
'display',
'block',
{
media: '(max-width: 768px)'
}
)
})
})
我收到一个错误No style rules found on passed Component
,经过研究,我找不到使用.toHaveStyleRule
. 如果我取出expanded-view
并制作 parent <ExpandedView>
,这很好用。但是,我必须运行一个案例来测试点击状态,然后<ExpandedView>
在更改isExpanded
道具时测试样式是否正确。我宁愿在用户单击样式更改时进行测试 - 而不是进行多次测试。任何想法如何做到这一点?
解决方案
推荐阅读
- directx - 未保存对像素着色器的更改
- python - 将变量传递给类属性
- c - 使用回调的优点(在非事件驱动程序中)
- asp.net - 如何将主 URL 重定向到 ASP.NET MVC 中的新路径
- centos7 - Centos 7 535 5.7.8 错误:身份验证失败:一般失败
- python - 合并字符串列上的两个数据框 - 复合字符串列
- ios - iOS react-native CameraRoll 加载太慢。
- javascript - 使用 Mongoose 设置 redis 时理解 JS 代码
- python - 逐行打印 SSH 输出,而不是一次打印所有内容
- java - 物体运动模糊