单元测试怎么测CSS样式是否生效?
我写了个按钮组件,想用Jest + Testing Library做单元测试,但不知道怎么验证CSS样式有没有正确应用。比如我给按钮加了hover效果,测试里能检测到吗?
这是我的CSS代码:
.my-button {
background-color: #007bff;
transition: background-color 0.2s;
}
.my-button:hover {
background-color: #0056b3;
}
试过用getComputedStyle,但在JSDOM环境里好像不支持:hover伪类,一直拿不到hover后的样式,有啥靠谱的方案吗?
你真要测 hover 效果,要么用 Cypress / Playwright 做端到端测试,它们能真正在浏览器里触发 hover,然后拿 computed style;要么退而求其次,只测“类名是否正确应用”,比如:
但如果你的方案是纯写 CSS 的
:hover(没加 JS 类名),那测试里根本拿不到 hover 状态——因为 JSDOM 不支持。这种情况下,建议:1. 要么改用 CSS Modules + 动态类名(比如用
:global(.is-hover)的方式,配合 JS 模拟 hover),这样测试能测;2. 要么直接放弃单元测试测样式,改用 Storybook + Chromatic 做视觉回归;
3. 要么把样式逻辑抽成 JS 变量(比如用 styled-components / emotion 的 theme),这样测试能测
background-color的值,但依然测不了 hover 时机。说白了,单元测试该测的是逻辑(比如按钮点击是否触发回调、状态是否更新),样式该交给更贴近真实环境的测试工具。别在 JSDOM 里死磕伪类了,那地方连
requestAnimationFrame都不准,更别说渲染引擎行为了。