Перейти к основной части
Version: 25.x

Модули ECMAScript

Jest обеспечивает экспериментальную поддержку модулей ECMAScript (ESM).

Обратите внимание, что в текущей реализации существует множество ошибок, как известных, так и неизвестных. Кроме того, не весь функционал до конца реализован. 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.

  1. Ensure you either disable code transforms by passing transform: {} or otherwise configure your transformer to emit ESM rather than the default CommonJS (CJS).
  2. Execute 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 variables.
  3. Beyond that, we attempt to follow node's logic for activating "ESM mode" (such as looking at type in package.json or mjs files), see their docs for details.

Различия между ESM и CommonJS#

Большинство различий объясняются в документации Node, но в дополнение к упомянутым в ней вещам, Jest добавляет специальную переменную во все исполняемые файлы - объект jest. Для доступа к этому объекту в ESM необходимо импортировать его из модуля @jest/globals.

import {jest} from '@jest/globals';
jest.useFakeTimers();
// и т.д.

Пожалуйста, обратите внимание, что в настоящее время мы не поддерживаем jest.mock в ESM, но мы намерены добавить это в будущем. Смотрите эту проблему для получения свежей информации.