Модули ECMAScript
Jest поставляется с экспериментальной поддержкой модулей ECMAScript (ESM).
Обратите внимание, что из-за экспериментальной природы в реализации Jest есть множество известных и неизвестных ошибок и отсутствующих функций. Следует ознакомиться с следящим вопросом и меткой в системе отслеживания проблем для получения последнего статуса.
Также обратите внимание, что API, используемые Jest для реализации поддержки ESM, по-прежнему считаются экспериментальными в Node (начиная с версии
14.13.1).
Учитывая предупреждения, вот как активировать поддержку ESM в ваших тестах.
Убедитесь, что вы либо отключили преобразования кода, передав
transform: {}, либо настроили свой преобразователь таким образом, чтобы он генерировал ESM, а не стандартный CommonJS (CJS).-
Выполните
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. Помимо этого, мы пытаемся следовать логике
node, чтобы активировать «режим ESM» (например, просматриваяtypeв файлахpackage.jsonили.mjs), см. их документацию для получения подробностей.Если вы хотите обращаться с другими расширениями файлов (такими как
.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