Jest 28发布

Jest 28终于来了,它带来了一些长期以来一直要求的特性,比如支持跨多台机器的测试运行分片、包导出和自定义假计时器行为的能力

新特性

安装大小减少了大约 1/3

正如在去年的Jest 27博客中所宣布的那样,已经从默认安装中删除了一些不再默认使用的软件包。因此,安装大小减少了约1/3。

测试运行分片,可以在不同机器上运行部分测试

Jest现在包括一个新的——shard CLI选项,由马里奥·内伯贡献。它允许您在不同的机器上运行部分测试,这是Jest最古老的特性请求之一。

Jest自己的CI测试套件在Ubuntu上从10分钟缩短到3分钟,在Windows上从20分钟缩短到7分钟。

全面支持 package.json exports

Jest在27.3中只提供了最小的出口支持。但是,它只支持“main”入口点(.),而且只有在package.json中没有main字段时才支持。在Jest 27中,提供了require或import condition。在Jest 28中,Jest -environment-node现在将自动提供节点和节点加载项条件,而Jest -environment-jsdom将提供浏览器条件。 这一直是Jest最大的兼容性问题之一,希望现在已经彻底解决了这个问题。

fakeTimers 可配置并公开运行时 API

Jest 26引入了“modern” fakeTimers的概念,使用@sinonjs/fake-timers, Jest 27将其作为默认值。在Jest 28中,通过配置和运行时api公开了更多的底层实现。nextTick提高了与虚假承诺的兼容性,或启用自动推进计时器的advanceTimers。

GitHub Actions Reporter

Jest现在附带了一个用于GitHub Actions的报告程序,它将使用注释内联打印测试错误

Jest 28发布_第1张图片

内联 testEnvironmentOptions

现在可以在文件中内联传递testEnvironmentOptions,类似于设置测试环境的方式。如果你想在单个文件中更改URL,这是很有用的。


js

复制代码

/** * @jest-environment jsdom * @jest-environment-options {"url": "https://jestjs.io/"} */ test('use jsdom and set the URL in this test file', () => { expect(window.location.href).toBe('https://jestjs.io/'); });

All Node.js globals 支持

Node v18中的new fetch这个函数在Jest中不可用。我们必须手动复制任何全局变量到测试全局变量中,这是一个长期存在的问题。对于Jest 28,这不再是一个问题,因为它现在检查Jest本身运行的全局环境,并复制测试环境中缺失的任何全局变量。

ESM、TS 等相关功能增强

data:url

Tommaso Bossi提供了对数据url的支持,现在可以内联定义一些JavaScript来运行,而无需使用eval。

import.meta.jest

虽然能够通过import {jest}从'@jest/globals'在jest中访问joke,但是这并不能够在CJS定义全局jest变量。所以Jest 28有import.meta.jest,这样更容易访问。

jest-light-runner

由Nicolò Ribaudo创建,名为Jest -light runner。这几乎利用了DX Jest的所有优点,并通过在Node上进行更小的抽象而大大提高了速度。Babel的测试在迁移后几乎快了一倍。虽然有一些注意事项,但这个运行器的存在应该使具有较小Node模块的人更容易测试选择Jest

更多资讯内容请查看该链接:jestjs.io/blog/2022/0…

Github 发布的变更如下:github.com/facebook/je…

转载于:Jest 28发布 - 掘金 (juejin.cn)

你可能感兴趣的:(jest)