跳至主内容

Jest 的 2016 年

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

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

2016 年对 JavaScript 测试领域而言是 Jest 的重要一年。我们在上半年重写了 Jest,建立了坚实基础以显著提升性能并优化 JavaScript 代码测试的开发者体验。我们对整个代码库进行了 Flow 类型标注,为 Jest 本身构建了大量集成测试,并采用 lerna 将 Jest 从框架转变为 零痛苦的 JavaScript 测试平台

新推出的 react-test-renderer 终于实现了对 react-native 组件的测试。通过 jest-react-native 预设(现已直接集成到 react-native),Jest 现可开箱即用地支持任何 React 项目,并在 create-react-appreact-native 项目中预配置。我们将 Jest 的核心组件集成到 react-native 的打包工具中,而全新的快照测试功能更延伸至 Jest 之外:它作为 "storyshots" 集成到 React Storybook 中,并被 ava 等其他测试运行器采用。

专为驱动 Jest 快照功能而重构的 pretty-format 项目以性能为优先考量,近期已并入 Jest 的 monorepo,同时也在其他测试运行器中发挥作用。如今的 Jest 更侧重于汇集多样化的测试理念和解决方案,而非仅提供单一测试框架实现。

我要衷心感谢所有在今年为 Jest 作出贡献的人们,包括开源社区成员和 Facebook 同事:Dmitrii Abramov、Cristian Carlesso、Dan Abramov、Daniel Lo Nigro、Maxim Derbin、Evan Scott、Forbes Lindesay、Keyan Zhang 以及其他 60 余位贡献者。我们还要欢迎 Michał Pierzchała (@thymikee) 成为 Jest 首位官方外部贡献者,他在管理仓库 issue 和 PR 方面表现出色。如果您希望参与 Jest 贡献,我们准备了多组新手友好任务,并随时欢迎在 Discord 频道提供协助。

支持 Jest 的 repl.it

Amjad Massad 构建了 Jest 容器,您现在可直接在浏览器中试用 Jest。今后创建 GitHub issue 时可使用此功能,这将加速问题排查进程。Amjad 和 Haya 正在打造 repl.it,通过为教育者、学习者和开发者构建强大而简洁的工具平台来实现编程民主化。他们同时正在招募优秀工程师

社区动态

过去半年有 100 余家公司采用 Jest,我们深感荣幸。Twitter、Pinterest、Paypal、nytimes、IBM (Watson)、Spotify、eBay、SoundCloud、Intuit、FormidableLabs、Automattic、Trivago 和 Microsoft 等企业已全面或部分转向 Jest 满足其 JavaScript 测试需求。衷心感谢您给予本项目机会!我们还要感谢所有在会议和聚会上分享 Jest 经验的朋友,以及撰写博客探讨 Jest 实践心得的每一位作者!

以下是过去两个月社区中的动态:

Jest 17 和 18 中的新功能、变更与修复

Jest 诞生于五年多前,作为一个历史悠久的框架,它积累了一些技术债务。因此我们比表面需求更频繁地进行破坏性变更:我们相信逐步减少技术债务对确保 Jest 项目的长期可维护性至关重要。我们未在博客中专门宣布 Jest 17,如果您过去一个月尚未升级,更新日志可能对您有帮助。

  • 破坏性变更: 移除 pit,推荐使用 ittest;移除 mockImpl,推荐使用 jest.fn()mockImplementation

  • 破坏性变更:--jsonOutputFile 重命名为 --outputFile

  • 破坏性变更: 更新 testRegex 以包含 test.jsspec.js 文件。

  • 破坏性变更: 用新的 transform 选项替代 scriptPreprocessor

  • 破坏性变更: testResultsProcessor 函数现在必须返回修改后的结果。

  • 潜在破坏性变更: 使用解析算法替代 path.resolve 正确解析 snapshotSerializerssetupFilestransformtestRunnertestResultsProcessor。这主要意味着这些选项不再需要 <rootDir>

  • 新增: pretty-formatjest-editor-support 已合并到 Jest 中。

  • 新增: expect.anyexpect.anythingexpect.objectContainingexpect.arrayContainingexpect.stringMatching

  • 新增: --testResultsProcessor 现可通过 CLI 使用。

  • 新增:jest-haste-map 中实现文件监听功能。

  • 新增: 可通过 JEST_HIDE_USAGE 隐藏监视模式下的使用信息。

  • 新增: expect.assertions(number) 确保单个测试执行指定数量的断言。

  • 新增: .toMatchSnapshot(?string) 功能支持为快照命名。

  • 新增: toMatchObjecttoHavePropertytoHaveLength 匹配器。

  • 新增: expect.extend

  • 新增: 支持自定义快照序列化器。

  • 新增: 快照和断言中的大差异默认折叠显示,新增 --expand(或 -e)参数展示完整差异。

  • 新增: jest.resetAllMocks 替代 jest.clearAllMocks

  • 新增: --json 输出现在包含文件内各测试的详细信息。

  • 修复: test.concurrent 未处理的 Promise 拒绝问题。

  • 修复: 使用三参数 jest.mockbabel-plugin-jest-hoist 的问题。

  • 修复: jest-environment-node 中的 JSON 全局变量现来自 vm 上下文而非父级上下文。

  • 修复: Jest 不再打印 Babel 的堆栈跟踪。

  • 修复: 调用 FakeTimers.useTimers() 时重置伪计时器。

  • 修复: 快照中的正则表达式正确转义。

  • 修复: 改进大对象的格式化打印效果。

  • 修复: 使用 --notify 时操作系统通知中显示 NaN% Failed 的问题。

  • 修复: 无缓存计时数据的首次测试运行将使用独立进程而非串行执行。

  • 修复: Map/Set 对象比较逻辑。

  • 修复: test.concurrent 现在可与 --testNamePattern 参数配合使用。

  • 修复: 优化了 .toContain 匹配器功能。

  • 修复: 在 react-native 环境下正确解析带平台扩展名的模块。

  • 修复: jest-environment-node 中全局内置对象现可正常工作。

  • 修复: 在虚拟机上下文而非父级上下文中创建模拟对象。

  • 修复: .babelrc 文件现已被纳入 babel-jest 的转换缓存密钥。

  • 修复: 使用 haste 模块时的文档块解析问题。

  • 修复: 当未达到覆盖率阈值时正确返回退出代码。

  • 修复: Jest 在监视模式下现会完全清空终端回滚区域。

  • 弃用: jest-react-native 已弃用,现直接转发至 react-native

2017 上半年 Jest 开发计划

半年前我们公布了 Jest 的发展规划,很高兴我们已基本完成所有目标。接下来半年的计划如下:

  • 即时反馈: 整合 Nuclide 并优化更快速的监视模式

  • 优化开发者体验: 推出新版模拟 API 和改进版断言功能。

  • 提升性能与内存效率: 全面分析 Jest 性能并优化执行效率。

  • 快照测试改进: 快照审批模式、语法高亮及优化的 react-test-renderer API。

  • 网站升级: 全面改版官网与文档,新增 Jest 速查表。

我们暂不提供具体时间表或功能排期,部分计划可能无法如期完成。若您希望参与实现这些功能,欢迎提交 issue 和 PR 分享您的想法,让我们在 2017 年携手完善 Jest。