Skip to content

Releases: jestjs/jest

Jest 30

10 Jun 02:23
Compare
Choose a tag to compare

Today we are happy to announce the release of Jest 30. This release features a substantial number of changes, fixes, and improvements. While it is one of the largest major releases of Jest ever, we admit that three years for a major release is too long. In the future, we are aiming to make more frequent major releases to keep Jest great for the next decade.

If you want to skip all the news and just get going, run npm install jest@^30.0.0 and follow the migration guide: Upgrading from Jest 29 to 30.

Read the full blog post

Features

  • [*] Renamed globalsCleanupMode to globalsCleanup and --waitNextEventLoopTurnForUnhandledRejectionEvents to --waitForUnhandledRejections
  • [expect] Add ArrayOf asymmetric matcher for validating array elements. (#15567)
  • [babel-jest] Add option excludeJestPreset to allow opting out of babel-preset-jest (#15164)
  • [expect] Revert #15038 to fix expect(fn).toHaveBeenCalledWith(expect.objectContaining(...)) when there are multiple calls (#15508)
  • [jest-circus, jest-cli, jest-config] Add waitNextEventLoopTurnForUnhandledRejectionEvents flag to minimise performance impact of correct detection of unhandled promise rejections introduced in #14315 (#14681)
  • [jest-circus] Add a waitBeforeRetry option to jest.retryTimes (#14738)
  • [jest-circus] Add a retryImmediately option to jest.retryTimes (#14696)
  • [jest-circus, jest-jasmine2] Allow setupFilesAfterEnv to export an async function (#10962)
  • [jest-circus, jest-test-result] Add startedAt timestamp in TestCaseResultObject within onTestCaseResult (#15145)
  • [jest-cli] Export buildArgv (#15310)
  • [jest-config] [BREAKING] Add mts and cts to default moduleFileExtensions config (#14369)
  • [jest-config] [BREAKING] Update testMatch and testRegex default option for supporting mjs, cjs, mts, and cts (#14584)
  • [jest-config] Loads config file from provided path in package.json (#14044)
  • [jest-config] Allow loading jest.config.cts files (#14070)
  • [jest-config] Show rootDir in error message when a preset fails to load (#15194)
  • [jest-config] Support loading TS config files using esbuild-register via docblock loader (#15190)
  • [jest-config] Allow passing TS config loader options via docblock comment (#15234)
  • [jest-config] If Node is running with type stripping enabled, do not require a TS loader (#15480)
  • [@jest/core] Group together open handles with the same stack trace (#13417, & #14789)
  • [@jest/core] Add perfStats to surface test setup overhead (#14622)
  • [@jest/core] [BREAKING] Changed --filter to accept an object with shape { filtered: Array<string> } to match documentation (#13319)
  • [@jest/core] Support --outputFile option for --listTests (#14980)
  • [@jest/core] Stringify Errors properly with --json flag (#15329)
  • [@jest/core, @jest/test-sequencer] [BREAKING] Exposes globalConfig & contexts to TestSequencer (#14535, & #14543)
  • [jest-each] Introduce %$ option to add number of the test to its title (#14710)
  • [@jest/environment] [BREAKING] Remove deprecated jest.genMockFromModule() (#15042)
  • [@jest/environment] [BREAKING] Remove unnecessary defensive code (#15045)
  • [jest-environment-jsdom] [BREAKING] Upgrade JSDOM to v22 (#13825)
  • [@jest/environment-jsdom-abstract] Introduce new package which abstracts over the jsdom environment, allowing usage of custom versions of JSDOM (#14717)
  • [jest-environment-node] Update jest environment with dispose symbols Symbol (#14888 & #14909)
  • [expect, @jest/expect] [BREAKING] Add type inference for function parameters in CalledWith assertions (#15129)
  • [@jest/expect-utils] Properly compare all types of TypedArrays (#15178)
  • [@jest/fake-timers] [BREAKING] Upgrade @sinonjs/fake-timers to v13 (#14544 & #15470)
  • [@jest/fake-timers] Exposing new modern timers function advanceTimersToFrame() which advances all timers by the needed milliseconds to execute callbacks currently scheduled with requestAnimationFrame (#14598)
  • [jest-matcher-utils] Add SERIALIZABLE_PROPERTIES to allow custom serialization of objects (#14893)
  • [jest-mock] Add support for the Explicit Resource Management proposal to use the using keyword with jest.spyOn(object, methodName) (#14895)
  • [jest-reporters] Add support for DEC mode 2026 (#15008)
  • [jest-resolver] Support file:// URLs as paths (#15154)
  • [jest-resolve,jest-runtime,jest-resolve-dependencies] Pass the conditions when resolving stub modules (#15489)
  • [jest-runtime] Exposing new modern timers function jest.advanceTimersToFrame() from @jest/fake-timers (#14598)
  • [jest-runtime] Support import.meta.filename and import.meta.dirname (available from Node 20.11) (#14854)
  • [jest-runtime] Support import.meta.resolve (#14930)
  • [jest-runtime] [BREAKING] Make it mandatory to pass globalConfig to the Runtime constructor (#15044)
  • [jest-runtime] Add unstable_unmockModule (#15080)
  • [jest-runtime] Add onGenerateMock transformer callback for auto generated callbacks (#15433 & #15482)
  • [jest-runtime] [BREAKING] Use vm.compileFunction over vm.Script (#15461)
  • [@jest/schemas] Upgrade @sinclair/typebox to v0.34 (#15450)
  • [@jest/types] test.each(): Accept a readonly (as const) table properly (#14565)
  • [@jest/types] Improve argument type inference passed to test and describe callback functions from each tables (#14920)
  • [jest-snapshot] [BREAKING] Add support for Error causes in snapshots (#13965)
  • [jest-snapshot] Support Prettier 3 (#14566)
  • [@jest/util-snapshot] Extract utils used by tooling from jest-snapshot into its own package (#15095)
  • [pretty-format] [BREAKING] Do not render empty string children ('') in React plugin (#14470)

Fixes

  • [expect] Show AggregateError to display (#15346)
  • [*] Replace exit with exit-x (#15399)
  • [babel-plugin-jest-hoist] Use denylist instead of the deprecated blacklist for Babel 8 support (#14109)
  • [babel-plugin-jest-hoist] Do not rely on buggy Babel behaviour (#15415)
  • [expect] Check error instance type for toThrow/toThrowError (#14576)
  • [expect] Improve diff for failing expect.objectContaining (#15038)
  • [expect] Use Array.isArray to check if an array is an Array (#15101)
  • [expect] Fix Error cause assertion errors (#15339)
  • [jest-changed-files] Prin...
Read more

v30.0.0-beta.4

27 May 07:05
Compare
Choose a tag to compare
v30.0.0-beta.4 Pre-release
Pre-release

What's Changed

  • feat(runtime): use compileFunction over new Script by @SimenB in #15461

Full Changelog: v30.0.0-beta.3...v30.0.0-beta.4

v30.0.0-beta.3

27 May 03:34
Compare
Choose a tag to compare
v30.0.0-beta.3 Pre-release
Pre-release

Jest 30 is shipping soon. Please help us test the beta and open issues and Pull Requests if you run into any issues.

Major changes & improvements

Fixes

New Contributors

Full Changelog: https://github.com/jestjs/jest/blob/main/CHANGELOG.md

v30.0.0-alpha.7

30 Jan 08:33
Compare
Choose a tag to compare
v30.0.0-alpha.7 Pre-release
Pre-release

Features

  • [jest-cli] Export buildArgv (#15310)
  • [jest-config] If Node is running with type stripping enabled, do not require a TS loader (#15480)
  • [@jest/core] Stringify Errors properly with --json flag (#15329)
  • [@jest/fake-timers] [BREAKING] Upgrade @sinonjs/fake-timers to v13 (#14544 & #15470)
  • [jest-runtime] Add onGenerateMock transformer callback for auto generated callbacks (#15433)
  • [@jest/schemas] Upgrade @sinclair/typebox to v0.34 (#15450)

Fixes

  • [*] Replace exit with exit-x (#15399)
  • [babel-plugin-jest-hoist] Do not rely on buggy Babel behaviour (#15415)
  • [jest-circus] Concurrent tests now emit jest circus events at the correct point and in the expected order. (#15381)
  • [jest-schemas, jest-types] [BREAKING] Fix type of testFailureExitCode config option(#15232)
  • [jest-util] Always load mjs files with import (#15447)

New Contributors

Full Changelog: v30.0.0-alpha.6...v30.0.0-alpha.7

v30.0.0-alpha.6

08 Aug 07:46
Compare
Choose a tag to compare
v30.0.0-alpha.6 Pre-release
Pre-release

Features

  • [babel-jest] Add option excludeJestPreset to allow opting out of babel-preset-jest (#15164)
  • [jest-circus, jest-test-result] Add startedAt timestamp in TestCaseResultObject within onTestCaseResult (#15145)
  • [jest-config] Show rootDir in error message when a preset fails to load (#15194)
  • [jest-config] Support loading TS config files using esbuild-register via docblock loader (#15190)
  • [jest-config] allow passing TS config loader options via docblock comment (#15234)
  • [expect, @jest/expect] [BREAKING] Add type inference for function parameters in CalledWith assertions (#15129)
  • [@jest/expect-utils] Properly compare all types of TypedArrays (#15178)
  • [jest-resolver] Support file:// URLs as paths (#15154)
  • [jest-runtime] Add unstable_unmockModule (#15080)
  • [expect] Use Array.isArray to check if an array is an Array (#15101)
  • [@jest/create-cache-key-function] Correct the return type of createCacheKey (#15159)
  • [pretty-format] Fixed a bug where "anonymous custom elements" were not being printed as expected. (#15138)
  • [jest-worker] Properly handle a circular reference error when worker tries to send an assertion fails where either the expected or actual value is circular (#15191)
  • [jest-worker] Properly handle a BigInt when worker tries to send an assertion fails where either the expected or actual value is BigInt (#15191)

Performance

  • [jest-runner] Better cleanup source-map-support after test to resolve (minor) memory leak (#15233)

Chore & Maintenance

  • [*] [BREAKING] Drop support for Node.js versions 14, 19 and 21 (#14460, #15118)
  • [babel-jest, @jest/transform] Update babel-plugin-istanbul to v6 (#15156)
  • [babel-plugin-jest-hoist] Move unnecessary dependencies to devDependencies (#15010)

New Contributors

Full Changelog: v30.0.0-alpha.5...v30.0.0-alpha.6

v30.0.0-alpha.5

30 May 12:47
Compare
Choose a tag to compare
v30.0.0-alpha.5 Pre-release
Pre-release

Features

  • [@jest/util-snapshot] Extract utils used by tooling from jest-snapshot into its own package (#15095)
  • [jest-each] Introduce %$ option to add number of the test to its title (#14710)

Fixes

  • [jest-config] Allow Node16/NodeNext/Bundler moduleResolution in project's tsconfig (#14739)
  • [BREAKING] Specifying testPathPatterns when programmatically calling watch must be specified as `new

Chore & Maintenance

  • [*] Increase version of micromatch to ^4.0.7 (#15082)
  • [docs] Revised documentation for .toHaveBeenCalled() to accurately depict its functionality. (#14853)

New Contributors

Full Changelog: v30.0.0-alpha.4...v30.0.0-alpha.5

v30.0.0-alpha.4

12 May 21:48
Compare
Choose a tag to compare
v30.0.0-alpha.4 Pre-release
Pre-release

Features

  • [jest-circus] Add a retryImmediately option to jest.retryTimes (#14696)
  • [@jest/core] Support --outputFile option for --listTests (#14980)
  • [@jest/environment] [BREAKING] Remove deprecated jest.genMockFromModule() (#15042)
  • [@jest/environment] [BREAKING] Remove unnecessary defensive code (#15045)
  • [jest-matcher-utils] Add SERIALIZABLE_PROPERTIES to allow custom serialization of objects (#14893)
  • [jest-reporters] Add support for DEC mode 2026 (#15008)
  • [jest-runtime] Support import.meta.resolve (#14930)
  • [jest-runtime] [BREAKING] Make it mandatory to pass globalConfig to the Runtime constructor (#15044)
  • [@jest/types] Improve argument type inference passed to test and describe callback functions from each tables (#14920)

Fixes

  • [expect] Improve diff for failing expect.objectContaining (#15038)
  • [jest-changed-files] Print underlying errors when VCS commands fail (#15052)
  • [jest-changed-files] Abort sl root call if output resembles a steam locomotive (#15053)
  • [jest-each] Allow $keypath templates with null or undefined values (#14831)
  • [@jest/expect-utils] Catch circular references within arrays when matching objects (#14894)
  • [@jest/expect-utils] Fix not addressing to Sets and Maps as objects without keys (#14873)
  • [jest-util] Add missing dependency on jest-regex-util (#15030)

Chore & Maintenance

  • [@jest/reporters] Upgrade istanbul-lib-source-maps (#14924)
  • [jest-util] Upgrade picomatch to v4 (#14653 & #14885)
  • [docs] Link NestJS documentation on testing with Jest (#14940)

New Contributors

Full Changelog: v30.0.0-alpha.3...v30.0.0-alpha.4

v30.0.0-alpha.3

20 Feb 11:20
Compare
Choose a tag to compare
v30.0.0-alpha.3 Pre-release
Pre-release

Features

  • [jest-circus] Add a waitBeforeRetry option to jest.retryTimes (#14738)
  • [jest-circus, jest-jasmine2] Allow setupFilesAfterEnv to export an async function (#10962)
  • [jest-config] Loads config file from provided path in package.json (#14044)
  • [jest-config] Allow loading jest.config.cts files (#14070)
  • [@jest/core] Group together open handles with the same stack trace (#13417, & #14789)
  • [@jest/core] [BREAKING] Changed --filter to accept an object with shape { filtered: Array<string> } to match documentation (#13319)
  • [@jest/environment-jsdom-abstract] Introduce new package which abstracts over the jsdom environment, allowing usage of custom versions of JSDOM (#14717)
  • [jest-environment-node] Update jest environment with dispose symbols Symbol (#14888 & #14909)
  • [jest-mock] Add support for the Explicit Resource Management proposal to use the using keyword with jest.spyOn(object, methodName) (#14895)
  • [jest-runtime] Support import.meta.filename and import.meta.dirname (available from Node 20.11)
  • [jest-circus] Replace recursive makeTestResults implementation with iterative one (#14760)
  • [jest-circus] Omit expect.hasAssertions() errors if a test already has errors (#14866)
  • [jest-cli] [BREAKING] Validate CLI flags that require arguments receives them (#14783)
  • [jest-config] Support testTimeout in project config (#14697)
  • [jest-config] Support coverageReporters in project config (#14697)
  • [jest-config] Allow reporters in project config (#14768)
  • [pretty-format] [BREAKING] Print ArrayBuffer and DataView correctly (#14290)

Performance

  • [jest-haste-map] Only spawn one process to check for watchman installation (#14826)

Chore & Maintenance

  • [*] [BREAKING] Upgrade to glob@10 (#14509)
  • [*] Use TypeError over Error where appropriate (#14799)
  • [jest-schemas] Upgrade @sinclair/typebox (#14775)
  • [docs] Append to NODE_OPTIONS, not overwrite (#14730)
  • [docs] Updated .toHaveBeenCalled() documentation to correctly reflect its functionality (#14842)

New Contributors

Full Changelog: v30.0.0-alpha.2...v30.0.0-alpha.3

v30.0.0-alpha.2

16 Nov 09:33
Compare
Choose a tag to compare
v30.0.0-alpha.2 Pre-release
Pre-release

Features

  • [jest-circus, jest-cli, jest-config] Add waitNextEventLoopTurnForUnhandledRejectionEvents flag to minimise performance impact of correct detection of unhandled promise rejections introduced in #14315 (#14681)
  • [@jest/core] Add perfStats to surface test setup overhead (#14622)

Fixes

  • [jest-config] Support testTimeout in project config (#14697)
  • [@jest/expect-utils] [BREAKING] exclude non-enumerable in object matching (#14670)
  • [@jest/expect-utils] Fix comparison of URL (#14672)
  • [@jest/expect-utils] Check Symbol properties in equality (#14688)

Chore & Maintenance

  • [expect] [BREAKING] Remove .toBeCalled(), .toBeCalledTimes(), .toBeCalledWith(), .lastCalledWith(), .nthCalledWith(), .toReturn(), .toReturnTimes(), .toReturnWith(), .lastReturnedWith(), .nthReturnedWith() and .toThrowError() matcher aliases (#14632)
  • [jest-config, @jest/core, jest-util] Upgrade ci-info (#14655)
  • [jest-mock] [BREAKING] Remove MockFunctionMetadataType, MockFunctionMetadata and SpyInstance types (#14621)
  • [jest-transform] Upgrade write-file-atomic (#14274)
  • [jest-util] Upgrade picomatch to v3 (#14653)

New Contributors

Full Changelog: v30.0.0-alpha.1...v30.0.0-alpha.2

v30.0.0-alpha.1

30 Oct 13:35
Compare
Choose a tag to compare
v30.0.0-alpha.1 Pre-release
Pre-release

Features

  • [jest-config] [BREAKING] Add mts and cts to default moduleFileExtensions config (#14369)
  • [jest-config] [BREAKING] Update testMatch and testRegex default option for supporting mjs, cjs, mts, and cts (#14584)
  • [@jest/core] [BREAKING] Group together open handles with the same stack trace (#13417, & #14543)
  • [@jest/core, @jest/test-sequencer] [BREAKING] Exposes globalConfig & contexts to TestSequencer (#14535, & #14543)
  • [jest-environment-jsdom] [BREAKING] Upgrade JSDOM to v22 (#13825)
  • [@jest/fake-timers] [BREAKING] Upgrade @sinonjs/fake-timers to v11 (#14544)
  • [@jest/fake-timers] Exposing new modern timers function advanceTimersToFrame() which advances all timers by the needed milliseconds to execute callbacks currently scheduled with requestAnimationFrame (#14598)
  • [jest-runtime] Exposing new modern timers function jest.advanceTimersToFrame() from @jest/fake-timers (#14598)
  • [@jest/schemas] Upgrade @sinclair/typebox to v0.31 (#14072)
  • [@jest/types] test.each(): Accept a readonly (as const) table properly (#14565)
  • [jest-snapshot] [BREAKING] Add support for Error causes in snapshots (#13965)
  • [jest-snapshot] Support Prettier 3 (#14566)
  • [pretty-format] [BREAKING] Do not render empty string children ('') in React plugin (#14470)

Fixes

  • [babel-plugin-jest-hoist] Use denylist instead of the deprecated blacklist for Babel 8 support (#14109)
  • [expect] Check error instance type for toThrow/toThrowError (#14576)
  • [jest-circus] [BREAKING] Prevent false test failures caused by promise rejections handled asynchronously (#14315)
  • [jest-circus, jest-expect, jest-snapshot] Pass test.failing tests when containing failing snapshot matchers (#14313)
  • [jest-config] Make sure to respect runInBand option (#14578)
  • [@jest/expect-utils] Fix comparison of DataView (#14408)
  • [jest-leak-detector] Make leak-detector more aggressive when running GC (#14526)
  • [jest-runtime] Properly handle re-exported native modules in ESM via CJS (#14589)
  • [jest-util] Make sure isInteractive works in a browser (#14552)
  • [pretty-format] [BREAKING] Print ArrayBuffer and DataView correctly (#14290)
  • [jest-cli] When specifying paths on the command line, only match against the relative paths of the test files (#12519)
    • [BREAKING] Changes testPathPattern configuration option to testPathPatterns, which now takes a list of patterns instead of the regex.
    • [BREAKING] --testPathPattern is now --testPathPatterns
  • [jest-reporters, jest-runner] Unhandled errors without stack get correctly logged to console (#14619)

Performance

Chore & Maintenance

  • [*] [BREAKING] Drop support for Node.js versions 14 and 19 (#14460)
  • [*] [BREAKING] Drop support for [email protected], minimum version is now 5.0 (#14542)
  • [*] Depend on exact versions of monorepo dependencies instead of ^ range (#14553)
  • [*] [BREAKING] Add ESM wrapper for all of Jest's modules (#14661)
  • [babel-jest, babel-preset-jest] [BREAKING] Increase peer dependency of @babel/core to ^7.11 (#14109)
  • [jest-cli, jest-config, @jest/types] [BREAKING] Remove deprecated --init argument (#14490)
  • [docs] Fix typos in CHANGELOG.md and packages/jest-validate/README.md (#14640)
  • [docs] Don't use alias matchers in docs (#14631)

New Contributors

Full Changelog: v29.7.0...v30.0.0-alpha.1