Storybook 快照测试为啥没捕捉到 CSS 样式变化?
我在用 Storybook 做组件快照测试,但发现即使改了组件的样式,快照也没更新。比如我调整了一个按钮的 padding 和背景色,Jest 的 snapshot 测试居然通过了,根本没报错。是不是快照测试默认不包含 CSS?
我试过用 @storybook/testing-react 里的 composeStories,也确认 story 能正常渲染,但样式改动就是没被记录。下面是我改的那段 CSS:
.my-button {
padding: 12px 24px;
background-color: #007bff;
border: none;
border-radius: 4px;
color: white;
}
难道快照只保存了 HTML 结构,没管样式?那怎么才能让快照对样式变更敏感呢?
要解决这个问题,可以使用
jest-styled-components或者jest-emotion这样的库来帮助 Jest 捕获和比较样式。不过,对于普通的 CSS 文件,我们可能需要一些额外的配置。一种方法是使用
jest-image-snapshot来捕获组件的视觉快照。这种方法不仅能够捕捉到 HTML 结构的变化,还能捕捉到样式的变化。以下是具体步骤:
1. 安装必要的依赖包:
2. 配置 Jest 使用
puppeteer和jest-image-snapshot。可以在你的测试文件中添加如下代码:在这个例子中,我们首先使用
@testing-library/react渲染组件,然后使用puppeteer将组件的 HTML 结构和样式捕获为图像,并使用jest-image-snapshot来比较这个图像是否与之前的快照匹配。注意,这种方法会稍微增加测试的时间,因为它需要启动浏览器并截屏。但是,这确保了你的样式变化会被捕获到。
希望这些步骤能帮助你解决快照测试无法捕捉 CSS 样式变化的问题。