Spec-Zone.ru › Jest

Модули ECMAScript

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

Обратите внимание, что из-за экспериментальной природы в реализации Jest есть множество известных и неизвестных ошибок и отсутствующих функций. Следует ознакомиться с следящим вопросом и меткой в системе отслеживания проблем для получения последнего статуса.

Также обратите внимание, что API, используемые Jest для реализации поддержки ESM, по-прежнему считаются экспериментальными в Node (начиная с версии 14.13.1).

Учитывая предупреждения, вот как активировать поддержку ESM в ваших тестах.

  1. Убедитесь, что вы либо отключили преобразования кода, передав transform: {}, либо настроили свой преобразователь таким образом, чтобы он генерировал ESM, а не стандартный CommonJS (CJS).

  2. Выполните node с --experimental-vm-modules, например, node --experimental-vm-modules node_modules/jest/bin/jest.js или NODE_OPTIONS=--experimental-vm-modules npx jest и т. д..

    В Windows можно использовать cross-env для установки переменных среды.

    Если вы используете Yarn, вы можете использовать yarn node --experimental-vm-modules $(yarn bin jest). Эта команда также будет работать, если вы используете Yarn Plug'n'Play.

  3. Помимо этого, мы пытаемся следовать логике node, чтобы активировать «режим ESM» (например, просматривая type в файлах package.json или .mjs), см. их документацию для получения подробностей.

  4. Если вы хотите обращаться с другими расширениями файлов (такими как .jsx или .ts) как с ESM, пожалуйста, используйте опцию extensionsToTreatAsEsm.

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

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

import {jest} from '@jest/globals';

jest.useFakeTimers();

// etc.

// alternatively
import.meta.jest.useFakeTimers();

// jest === import.meta.jest => true

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

© 2022 Facebook, Inc.
Licensed under the MIT License.
https://jestjs.io/docs/ecmascript-modules

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API