react css modules 导致快照测试失败

问题描述

react-css-modules 包将呈现如下 html:

className="src-Comp-___style__navi-col___1-3yc6d"

但是哈希字符串 (3yc6d) 会导致 jest 快照出错:

<div                                                                                                                                      
  - className="src-Comp-TopcoderFooter-___style__navi-col___6dcta"                                                             
  + className="src-Comp-TopcoderFooter-___style__navi-col___3yc6d"                                                             
>

如您所见,哈希值已更改,因此快照测试失败。

问题是我从 github 克隆了一个 repo,因此测试失败。 (当我添加拉取请求时它可能会失败。)

因此在我的电脑中生成的哈希值与 repo 所有者不同。 (如果我重新运行测试,哈希值不会改变。)

这个哈希背后的逻辑是什么,我怎样才能防止快照测试失败?

解决方法

react-css-modules 库已弃用;和 babel-plugin-react-css-modules 他们建议改用,已经有一段时间没有维护了,并且与最新版本的 Webpack 的 css-loader 不兼容(它负责 CSS 端的 CSS 名称转换;它决定了该哈希背后的实际逻辑,which you can find here)。

如果您需要该功能,我建议您使用 my fork of babel-plugin-react-css-modules,我会不断更新它并与最新的 css-loader 版本兼容 :)

PS:而且,是的,css-loader 中从 3.6.0 版本到当前 5.2.4 的更新已经改变了它为相同的类名产生的实际哈希值的数倍。 (S)CSS 文件。