Jest 28.1.1更新快照时未应用pretty-format格式化问题求助
针对你遇到的快照验证失败、更新快照无效的问题,试试以下解决方案:
检查
pretty-format版本一致性
运行npm ls pretty-format查看依赖树,确保项目中所有pretty-format的版本都是28.x(和Jest 28.1.1对应)。如果存在不同版本,执行npm install pretty-format@28.1.1 --save-dev强制统一版本,避免版本不兼容导致的格式化差异。排除编辑器/格式化工具对快照文件的修改
很多自动格式化工具(比如Prettier)会修改.snap文件的格式,导致和Jest的pretty-format输出不匹配。在.prettierignore中添加*.snap,或者在编辑器设置中禁用对快照文件的自动格式化,然后删除旧快照重新生成。检查Jest配置中的
snapshotFormat
打开jest.config.js,确认是否配置了自定义的snapshotFormat选项。如果有自定义配置,暂时注释掉该配置,重新运行jest --updateSnapshot测试是否恢复正常。完全删除快照文件后重新生成
直接删除项目中所有__snapshots__文件夹,然后执行jest --updateSnapshot重新生成所有快照。这种方式可以避免旧快照的残留数据干扰更新。清除Jest缓存
运行jest --clearCache清除Jest的缓存文件,缓存可能导致快照更新不生效。清除后再执行jest --updateSnapshot。排查测试用例中的动态内容
如果测试组件包含动态生成的内容(比如时间戳、随机ID、动态样式类名),会导致每次渲染结果不同。针对这类内容,使用Jest的匹配器(比如expect.any(String)、expect.objectContaining())忽略动态部分,或者通过jest.mock模拟稳定的返回值。
内容的提问来源于stack exchange,提问作者BenMcL

