Jest 28版本升级与关注点(shard分片调度测试)

前言

直入正题,jest 28 发布信息如下:

阅读本文前,我们默认你已经具备了应用 jest 的基础知识。

正文

依赖升级

以下 jest 基础依赖需要升级:

{
  // ↓ 这个包还没升级 v28 ,社区维护的
  "@types/jest": "^27.4.1",
  // ↓ 以下包都是 jest 官方维护的,major 版本一致
  "@jest/types": "28.0.2",
  "jest": "^28.0.3"
}

可能你升级时,版本与上文中不一致,升级至最新版本即可。

如果有 React 场景,你还需要升级:

{
  // ↓ RTL deps
  "@testing-library/jest-dom": "^5.16.4",
  "@testing-library/react": "^13.1.1",
  // ↓ jsdom 不再默认内置于 jest v28 ,需要显示安装
  "jest-environment-jsdom": "^28.0.2"
}

注:这里一定要显示安装 jsdom ( jest-environment-jsdom ) v28 (你可以在 v28 release changelog 中找到相关说明)。

As of Jest 28 “jest-environment-jsdom” is no longer shipped by default. make sure to install it separately.

两个关注点

下面聊两个比较关注的新 Feature 点。

Sharding of test run

jest 28 开始支持分片运行 test ,特别是在 ci 场景,若支持多台机器调用(如 github actions),将会极大减少 test 消耗时间。

Refer 1 : github actions practices

你可以在 facebook/jest - Actions 仓库找到多机调用的历史。

可以看到 jest 官库每次会调度 87 台机子:

Refer 2 : github actions configs

此外你可以在 jest 官库 workflows 寻找开启 shard 分片测试相关的 github actions 配置。

这里给出一份简单的核心配置指南:

  # ......
  
  strategy:
    fail-fast: false
    matrix:
      node-version: [12.x, 14.x, 16.x, 17.x, 18.x]
      os: [ubuntu-latest, macOS-latest, windows-latest]
      # ↓ 新增该行,配置分片来多倍调度机器
      shard: ['1/4', '2/4', '3/4', '4/4']

  # ......

  # 新增该行为,获取 github actions 机器 cpu 核数
  - name: Get number of CPU cores
    id: cpu-cores
    uses: SimenB/github-actions-cpu-cores@v1

  # ......
  
  # 测试时,需要新增 `max-workers` 和 `shard` 参数
  - name: Run tests (${{ matrix.shard }})
    run: pnpm jest -- --max-workers ${{ steps.cpu-cores.outputs.count }} --shard ${{ matrix.shard }}

  # ......

注意,这里需要关注几个点:

  • shard : 分片多少自行决定,但需要注意最好为偶数,否则可能存在除不尽。

  • pnpm params : pnpm v6 需要使用 -- 传导 jest 参数,v7 可以直接传导,无需 --

  • 参数说明 :通常 jest 会默认 cpu - 1 来并发 test ,但在 ci 中为了充分利用机器性能,会显示指定满 --max-workers 并发量为 cpu 值;--shard 代表所属片。

资源问题

虽然分片可以成倍的削减 test 运行时间,获得极大收益,但要确保你 确实有 大量的机器可以调度,如 github actions 的 macos 资源有限,通常只能一次并发 4 - 5 台,如果分片过多,会导致排队,总体 ci 时间更长,得不偿失。

GitHub Actions Reporter

jest 28 支持在 PR files change 中有更好的报错信息显示,被称为 github actions reporter 。

FYI

总结

关于更多信息和 Breaking change ,以及相应对策与解法,请从官方相关文档中寻找答案。

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值