跳至主内容

Jest 16.0:性能飙升的 CLI 及社区更新

· 6 分钟阅读
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

距离上一次重大版本发布已有一个月,这段时间我们对 Jest 进行了诸多重要改进。在此次主要更新中,我们调整了快照格式,升级 Jest 后可能需要更新现有快照。我们不会轻易做出这类变更,预计未来也不会频繁调整,但认为有必要定期优化格式设计。

CLI 全面升级

reporter

Jest 16 配备了全新的报告器界面,实时展示运行中的测试用例、动态摘要及基于历史测试时长预估的进度条。同时优化了 CLI 输出在不同配色方案下的显示效果。若前次运行存在失败用例,Jest 将优先执行这些测试,以便用户快速获取有效反馈。

我们还新增了多项实用功能:

  • 新增 CLI 参数:--testNamePattern=pattern-t <pattern> 支持命令行过滤测试,功能类似于测试代码中的 it.onlyfit

  • 失败测试用例将始终优先执行

  • jest <pattern> 现已支持不区分大小写,提升测试文件筛选便捷性

  • 支持中断监控模式(watch mode)下的测试运行:测试过程中按下监控模式功能键(aopqenter)即可中止当前测试并启动新任务

  • --bail 参数现支持监控模式。结合失败测试优先执行机制,Jest 监控模式将获得性能飞跃!

  • Jest 现已自动识别 jsx 扩展名的测试文件

  • 优化重复手动模拟文件警告机制,并改进了 Babel 编译 ES 模块的自动模拟功能

  • 新增 jest.clearAllMocks 函数,支持在测试间清除所有模拟

  • 优化了使用 moduleNameMapper 时的模块解析机制

  • 新增 --findRelatedTests <fileA> <fileB> 命令行选项,用于运行与指定文件关联的测试。该功能特别适合作为预提交钩子(pre-commit hook),仅运行与修改文件相关的测试

监控模式下中断测试运行的效果如下:watch

快照功能更新

Jest 的快照实现已完全重构。新版 jest-snapshot 包采用模块化设计,更易集成到其他测试运行器,并支持与 React Storybook 等工具深度整合。对于包含跳过或失败测试的文件,Jest 不再将快照标记为过期。快照格式也迎来多项改进:

  • 对象和数组现采用尾部逗号格式,最大限度减少未来快照变更

  • 移除快照中的函数名称显示。该设计曾引发 Node 版本兼容问题,影响代码覆盖率检测,且团队认为函数名变更对用户价值有限

  • 快照在文件内采用自然排序规则

升级至 Jest 16 后的差异对比效果:snapshots

测试库更新

我们已完成将Jasmine断言迁移至全新的Jest匹配器。新增了三个匹配器:toBeInstanceOftoContainEqualtoThrowErrorMatchingSnapshot。针对间谍/模拟匹配器toHaveBeenLastCalledWithtoHaveBeenCalledWithlastCalledWithtoBeCalledWith,我们提供了更易读的错误提示。现在所有断言都已重构并独立封装,未来我们将致力于使其成为独立模块,方便在Jest之外的测试框架中使用。

同时新增了大量社区需求的别名。现在聚焦单个测试可使用it.onlytest.only,也可沿用fit;跳过测试可使用it.skiptest.skip,与xit并存;定义并发测试则使用test.concurrent,特别适用于访问网络资源或数据库的测试场景。

最后,若需用其他断言库(如chai)覆盖全局expect,现在可通过setupTestFrameworkScriptFile配置选项实现。

社区动态

过去一个月涌现了大量关于Jest快照测试的文章,涵盖迁移指南与测试编写入门。我还通过直播视频详解了Jest快照测试原理:

多位作者撰写了快照测试相关文章,其中Jest团队高度认同的是《Jest快照测试初体验》。Ben在文中提出三个精辟观点:

  1. 快照测试是传统测试的补充而非替代

  2. 结合规范代码审查流程,快照测试价值倍增

  3. 快照测试与自动模拟配合效果卓越

强烈推荐阅读全文。Ben精妙阐述了快照测试的设计初衷——并非取代所有测试形式,而是为那些本不会编写测试的代码提供解决方案。它适用于React组件、CLI输出、错误信息等场景,但并非万能钥匙。Jest的目标是在保障性能与可维护性的前提下,提供多样化的高效测试方案。

其他快照测试亮点文章:

Redux 现已采用 Jest,Max Stoiber 撰写了测试 redux 代码的教程。还有篇很棒的MobX 测试指南。如果你使用 create-react-app,现在默认已集成 Jest。Kent C. Dodds 在 egghead.io 上制作了大量视频教程帮你快速上手 Jest。

如果你使用其他测试运行器,Kenneth Skovhus 开发了强大的 jest-codemods 库来自动完成迁移。Codemods 非常实用:它能帮你快速评估 Jest 是否适合你的项目。快来试试吧!

完整更新日志可在 GitHub 查看。Jest 16 是 JavaScript 社区通力协作的成果,项目贡献者已超过 220 人。感谢每一位参与者,是你们让这个项目如此卓越。