前言
直入正题,jest 28 发布信息如下:
-
jest v28.0.0 changelog : Release changelog
-
jest 28 config api : Configuring Jest
-
jest 28 release blog : Jest 28: Shedding weight and improving compatibility
阅读本文前,我们默认你已经具备了应用 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:
-
jest v28 config: reporters
总结
关于更多信息和 Breaking change ,以及相应对策与解法,请从官方相关文档中寻找答案。
以上。