Jest ships with experimental support for ECMAScript Modules (ESM).
Note that due to its experimental nature there are many bugs and missing features in Jest's implementation, both known and unknown. You should check out the tracking issue and the label on the issue tracker for the latest status.
Also note that the APIs Jest uses to implement ESM support is still considered experimental by Node (as of version
14.13.1
).
With the warnings out of the way, this is how you activate ESM support in your tests.
transform: {}
or otherwise configure your transformer to emit ESM rather than the default CommonJS (CJS).node
with --experimental-vm-modules
, e.g. node --experimental-vm-modules node_modules/.bin/jest
or NODE_OPTIONS=--experimental-vm-modules npx jest
etc.. On Windows, you can use cross-env
to be able to set environment variablesnode
's logic for activating "ESM mode" (such as looking at type
in package.json
or mjs
files), see their docs for detailsMost of the differences are explained in Node's documentation, but in addition to the things mentioned there, Jest injects a special variable into all executed files - the jest
object. To access this object in ESM, you need to import it from the @jest/globals
module.
import {jest} from '@jest/globals'; jest.useFakeTimers(); // etc.
Please note that we currently don't support jest.mock
in a clean way in ESM, but that is something we intend to add proper support for in the future. Follow this issue for updates.
© 2020 Facebook, Inc.
Licensed under the MIT License.
https://jestjs.io/docs/en/ecmascript-modules