跳至主内容

🃏 Jest 19:沉浸式观察模式与测试平台改进

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

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

今天我们很高兴发布 Jest 测试平台的第 19 版。这是迄今为止我们推出的最大规模 Jest 版本,我们非常激动地向您展示过去两个月构建的新功能:

沉浸式观察模式

我们完全重写了观察模式,使其即时响应且更具扩展性。因此使用体验真正实现了沉浸式:文件更改后测试立即重新运行,并且我们简化了选择特定测试的操作流程。

快照功能更新

我们对快照格式进行了几项调整。我们很少进行此类改动,仅在能切实改进快照功能时才考虑实施。除了引入快照版本号外,我们还整合了多项酝酿已久的格式改进:

  • 移除了顶层 testit 调用产生的快照名称中的 "test" 前缀

  • 优化了 React 元素的打印效果,减少元素末尾属性变更导致的格式变化

  • 增强了字符转义机制,使其更加健壮可靠

改进前:

exports[`test snap 1`] = `
<header>
<h1>
Jest \"19\"
</h1>
<Subtitle
name="Painless JavaScript Testing" />
</header>
`;

改进后(无 "test" 前缀,更优的 JSX 渲染效果,版本标识):

// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`snap 1`] = `
<header>
<h1>
Jest "19"
</h1>
<Subtitle
name="Painless JavaScript Testing"
/>
</header>
`;

我们认为现在是引入版本化快照的恰当时机,这能确保所有开发者都使用兼容的 Jest 版本。以下是关于需要更新快照的警告提示:

快照版本提示

请务必在更新前撤销所有本地更改,以确保平稳过渡,并避免将失败测试产生的无关变更带入新快照。

跳过测试的优化显示

在详细模式或单个测试套件中运行时,跳过的测试现在会以单行摘要显示,而非逐个列出。这有助于您聚焦当前重要的测试,同时大幅节省显示空间!

跳过测试的显示效果

新增 CLI 参数

Jest 19 提供了两个新的覆盖率相关参数,可通过命令行使用:

  • --collectCoverageFrom

  • --coverageDirectory

我们现在会对无效 CLI 参数报错而非忽略。例如当您尝试运行 jest --watc 时,将收到如下友好错误提示:

命令行错误提示

expect 功能增强

我们已基本实现与 npm 包 expect 的功能对等。该包的作者 Michael Jackson 已同意将其捐赠给 Jest 项目,这意味着 jest-matchers 将更名为 expect。由于我们的 expect 版本不追求完全兼容,Christopher Chedeau 正在开发代码转换工具以实现平滑迁移。Christopher 还对 jest-matchers 进行了多项改进,使其可在 Jest 之外使用,甚至能在浏览器中运行

eslint-plugin-jest —— 我们专属的 ESLint 插件

多亏了 Jonathan Kim,Jest 终于拥有了自己的官方 ESLint 插件。它提供了三条规则:

可通过 npm install --save-dev eslint-plugin-jestyarn add --dev eslint eslint-plugin-jest 安装,并在 ESLint 配置中添加 {"plugins": ["jest"]} 启用

新开源包:jest-validate

在重构 Jest 配置的验证和规范化代码时,我们对新的错误信息处理机制非常满意,因此将其提取为独立模块分享给大家。Jest 19 正式欢迎 jest-validate 加入我们的自给自足包家族

jest-validate 是通用的配置验证工具,可帮助处理 JavaScript 工具中的警告、错误和弃用消息。它还能向用户展示友好的正确配置示例,并配备简单而强大的 API。希望它能成为你项目中的得力助手!

validate

我们很高兴地宣布,自 v0.12 起,prettier 的配置选项已采用 jest-validate 进行验证。欢迎将其加入你的项目,试用后向我们反馈,并通过 GitHub 提交 PR 来改进它

增强的非对称匹配器

我们将非对称匹配器的实现从 Jasmine 迁移到 Jest,从而进一步优化了用户体验。现在非对称匹配器可以优雅地格式化输出,新增了 expect.stringContaining() 匹配器,并与 expect.toMatchObject() 协同工作,实现双剑合璧:

asymmetric-matchers

更完善的手动模拟

最新版本中,手动模拟终于支持嵌套文件夹。例如 __mocks__/react-native/Libraries/Text/Text.js 现在能正确模拟目标模块。我们还修复了虚拟模拟和传递依赖的问题,并改进了 moduleNameMapper 避免多个模式映射同一文件时覆盖模拟

破坏性变更

在清理和修复过程中,我们移除了从未官方支持的 mocksPattern 配置项。同时将 testPathDirs 配置项更名为 roots 以更准确反映其用途。roots 配置项的默认值为 ["<rootDir>"],可自定义包含任意数量的目录。rootDir 配置项始终主要作为其他配置项的占位符,此次重命名将使 Jest 配置更清晰

文档改版

你可能已经注意到,Hector RamosKevin Lacker 为 Jest 文档赋予了全新面貌。我们重构了网站组织方式,现在文档和 API 作为独立页面呈现:

我们全面重构了主页,更清晰地展现了 Jest 的核心理念:“零配置测试平台”。同时确保在移动设备上获得更流畅的阅读体验。对于 RSS 用户——我们终于提供了博客订阅源

社区动态更新

最后我们欣喜地宣布,ava 测试运行器已集成 Jest 平台的部分功能,现提供基础快照测试支持并采用 pretty-format。测试基础设施的整合降低了学习成本,促进了最佳实践的共享。我们期待未来能从现有测试库中汲取更多灵感。

完整的更新日志可在 GitHub 上查看。Jest 19 是真正的 JavaScript 社区协作成果,共有17 位贡献者参与了此次发布。我们衷心感谢每位参与者帮助推动这个项目变得更好。

本博文由 Rogelio GuzmanMichał Pierzchała 共同撰写。