Jest作为JavaScript生态中备受推崇的测试框架之一,历经多年发展,逐步成为开发者确保代码质量和稳定性的首选工具。2025年6月,Jest 30正式发布,这一版本被称为“更快、更轻、更好”的重大升级,不仅带来了性能的大幅提升,还为开发者提供了更多实用的功能和更优的使用体验。对于任何依赖JavaScript进行开发,特别是使用TypeScript和现代模块化技术的团队来说,Jest 30无疑是一场测试效率的革命。 Jest 30的发布揭示了团队在性能优化、功能创新和用户体验上的巨大投入。三年来未曾发布重大版本,如今Jest团队承诺将保持更为频繁和稳定的更新周期,持续推动框架进化。相比之前版本,Jest 30在运行速度和内存占用上都有着显著提升,特别是在大型项目中的表现尤为突出。
在实测案例中,某大型TypeScript应用的服务器端测试速度提升了近四成,内存消耗则减少了七成以上,而客户端测试也展现了良好的优化成果。 这一版本采用了全新的模块解析器unrs-resolver,使得模块加载更加规范、高效,同时改善了内存使用和测试隔离机制。对于长期面临测试速度瓶颈及内存压力的开发者而言,Jest 30带来的改善极具吸引力。此外,Jest 30还增强了对异步操作的处理能力,例如更好地识别和管理先被拒绝后被捕获的Promise,有效避免了测试中的误报和假阳性,提升了整体测试的可靠性。 在功能层面,Jest 30加入了多项创新特性,丰富了测试场景的支持。新引入的expect.arrayOf让开发者可以更加简洁地验证数组中所有元素的类型或结构,为类型安全保驾护航。
数据驱动测试也迎来了新玩法,test.each函数支持了特殊占位符%$,使得测试用例标题中可以自动插入测试序号,强化了测试报告的可读性和管理便利性。 对于使用原生ESM和TypeScript的项目,Jest 30同样表现出色。它支持import.meta.*和file://协议,并且允许直接使用.mts和.cts类型文件,消除了以往需要额外配置的繁琐步骤。通过不再加载传统的TypeScript转换器,仅在必要时利用Node的原生类型剥离功能,显著加快了测试启动和执行速度,为现代项目提供无缝体验。 在spy功能上,Jest 30引入了基于JavaScript新资源管理语法using的改进,用法更简洁且自动恢复监视,减少了手动清理的负担,保证测试环境的干净整洁。与此同时,升级后的@sinonjs/fake-timers库支持jest.advanceTimersToNextFrame方法,极大地方便了动画及依赖requestAnimationFrame的代码测试,提高了测试的准确性与效率。
测试重试机制也得到了强化,jest.retryTimes函数新增了延时重试和立即重试的配置选项,赋予开发者更灵活的失败恢复策略,提升了测试的稳定性和容错能力。与此同时,针对模块模拟的控制能力也有提升,实验性API jest.unstable_unmockModule允许更加精细的模拟取消操作,而jest.onGenerateMock方法则提供了在模拟生成时动态调整的可能,使得模块模拟更为符合复杂场景需求。 Jest 30聚焦于提升测试的隔离性和内存管理,引入了全新的globalsCleanup机制。该功能在测试文件执行完成后自动清理未释放的全局变量,有效防止内存泄漏和测试之间的状态串联。开发者可以选择开启严格模式,提前解决潜在的隐患,显著改善测试执行中的内存表现和稳定性。这个机制标志着Jest对测试环境健康的深度关注,也彰显了其打造高质量测试基础设施的决心。
此外,Jest 30还率先支持了在setupFilesAfterEnv中异步初始化,可以利用顶层await,极大提升了异步测试初始化的灵活性,为对环境配置有复杂依赖的场景提供了便利。定制化的对象序列化也被引入,用户可以通过定义序列化属性,控制快照和错误信息中输出的内容,使得调试和审查更聚焦关键数据,降低信息冗余。 尽管进步显著,Jest 30也面临一定挑战。jsdom 26的升级带来了一些测试环境的不兼容问题,特别是对window.location模仿存在一定影响。针对这点,Jest提供了新的@jest/environment-jsdom-abstract包,方便用户自定义测试环境。此外,团队也在考虑寻找或开发更适合测试需求的替代方案,力求在兼容性和性能之间取得更优平衡。
面向未来,Jest团队明确了优化方向。通过精简核心模块,集中资源提升性能,逐步剔除冷门功能,Jest将变得更轻量、更专注。除此之外,团队承诺实行更加规律的版本发布和废弃机制,减少对用户的冲击。开放协作机制的增强,也让社区参与变得更加容易,助力积累更多贡献者。团队敢于突破现有框架局限,推动Jest成为更具前瞻性和适应性的现代测试工具。 Jest 作为开源项目,凭借其模块化设计和明确的职责划分,具备良好的可持续发展潜力。
Jest 30所体现的大胆创新和持续改进,预示着它将继续引领JavaScript测试领域的发展潮流。开发者们不仅能够享受更高效稳定的测试体验,也能在社区协作中参与塑造未来的测试生态。 综上所述,Jest 30无疑为JavaScript测试注入了强劲动力。它带来的性能提升、丰富新特性及对现代语言特性的卓越支持,为开发者打造高效、可靠的测试环境提供了坚实基础。无论是大型企业级项目,还是中小型开源库,升级到Jest 30都将在测试效率和质量保障方面带来显著收益。随着更新频率的提升和社区活力的增强,Jest有望持续巩固其行业领先地位,成为更多开发者心中的首选测试工具。
未来几年,围绕Jest生态的创新与实践,必将为JavaScript发展增添更多精彩篇章。