babel-jest с модулями ES6

Я с удовольствием использую узел 8.6 с включенной опцией экспериментальных модулей ES6 (--experimental-modules). Это позволяет мне идеально писать простой код ES2015 для узла без использования babel.

Проблема в том, что когда я пытаюсь создать несколько тестов с помощью jest, он не жалуется на синтаксическую ошибку: «Неожиданный импорт токена».

Конфигурация .babelrc следующая:

{
  "env": {
    "test": {
      "presets": [
        ["env", {
          "targets": {
            "node": "8.6"
          }
        }]
      ]
    }
  }
}

Мой jest.config.js выглядит следующим образом:

module.exports = {
  testMatch: ['/tests/**/*.js', '**/?(*.)test.js'],
}

Выведенная ошибка:

    /app/tests/integration/controller/data-provider/Credentials/CredentialsList.action.test.js:2
    import { Credentials, AdWordsCredentials } from '../../../../../imports/models/data-provider/Credentials.mjs';
    ^^^^^^

    SyntaxError: Unexpected token import

      at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:305:17)
          at Generator.next (<anonymous>)
          at Promise (<anonymous>)

Соответствующие пакеты:

  • babel-core@^6.26.0
  • jest@^21.2.1
  • babel-jest@^21.2.0
  • babel-preset-env@^1.6.0

Любая помощь будет оценена по достоинству. Спасибо :)

ОБНОВЛЕНИЕ: я пробовал вызвать jest без babel с помощью следующей команды без каких-либо изменений: node --experimental-modules node_modules/.bin/jest


person Jack    schedule 08.10.2017    source источник
comment
Есть ли удача в этом разобраться? 2 года спустя у меня все еще та же проблема.   -  person geoidesic    schedule 06.11.2019


Ответы (2)


В Jest есть специальная реализация require, которая помогает с издевательством. К сожалению, это делает шутку несовместимой с node --experimental-modules. Babel, вероятно, лучший способ использовать модули ES6 с шуткой. См. https://github.com/facebook/jest/issues/4842.

person joshuanapoli    schedule 30.12.2017

Я не использовал шутку, и я не уверен, что это решит, но я надеюсь, что это может вам помочь.

Node по-прежнему поддерживает не весь синтаксис. Если вы действительно ищете более быстрый способ начать разработку, используя исходный код со всеми функциями Ecmascript2017, вам понадобится такой модуль, как @ kawix / core https://www.npmjs.com/package/@kawix/core

Как говорится в README.md, вы можете использовать все функции, включая «импорт» и «async / await», а также поддерживает машинописный текст и другие полезные функции, и все это без БОЛЬШОЙ ЗАВИСИМОСТИ. Вы можете использовать непосредственно с cli:

> npm install -g @kawix/core
> kwcore /path/to/fullsyntaxtsupport.js

Или, если вы хотите включить программно, создайте пример файла main.js для импорта файла с полным синтаксисом

var kawix= require("@kawix/core")
kawix.KModule.injectImport()
kawix.KModule.import("/path/to/fullsyntaxtsupport.js").catch(function(e){
    console.error("Some error: ",e)
})
person James Suárez    schedule 02.03.2019