Запуск js тестов - получение «Невозможно использовать оператор импорта вне модуля» - PullRequest
0 голосов
/ 03 мая 2020

Я добавил type: module, но это не помогло.

Я пытаюсь запустить тесты mocha или jest, которые используют import и export для исходных файлов.

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

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

За документацию Jest , если вы убедитесь, что babel-jest установлен и предоставили свою конфигурацию Babel для документации Babel , в файле конфигурации или package.json, например:

.babelrc.json

{
  "presets": [
    "@babel/env"
  ]
}

Затем babel-jest автоматически подберет его, и вам не нужно явно собирать файлы для их тестирования. Это также означает, что вам не нужно устанавливать флаги в командной строке при вызове Babel.


Обратите внимание, что если вы do хотите явно предварительно собрать, я бы порекомендовал :

  1. Использование сценария pre<script> вместо нескольких шагов в одной строке; и
  2. Повторное использование скрипта build, чтобы вам не приходилось вносить изменения в двух местах.

В вашем случае:

"scripts": {
  "build": "babel src/ --out-dir lib",
  "pretest": "npm run build",
  "test": "jest lib/*.test.js"
}
0 голосов
/ 03 мая 2020

Вам нужно использовать компилятор, а затем использовать скомпилированные файлы при запуске тестов.

Во многих ссылках говорится, что нужно добавить type: module, но не говорите намного больше.
Для ясности, Основное c сообщение:

SyntaxError: Cannot use import statement outside a module

потому, что вы используете import / export и , вы пытаетесь запустить файлы напрямую без компиляции.

Смещение ума здесь привыкает к редактированию файлов в одном каталоге и запуску тестов в другом.

Существует несколько различных подходов к этому в зависимости от конкретных потребностей c. Вот один из самых простых подходов, которые я нашел, используя Babel для этапа компиляции:

  • Установить babel npm install babel --save-dev
  • Добавить команды babel в package.json сценарии, например:

    "scripts": {
      "test": "babel src/ --out-dir lib --presets=@babel/env; jest lib/*.test.js",
      "build": "babel src/ --out-dir lib --presets=@babel/env"
    },  // this was for jest but you can use mocha, etc as needed
        // Note that using preset this way eliminates the need for a specific .babel.config.json file
    

Теперь, если вы запустите:

jest .

вы получите SyntaxError: Cannot use import statement outside a module, но если вы запустите npm t, вы get

Successfully compiled 2 files with Babel.
 PASS  lib/app.test.js
  All tests
    ✓ Canary test (2ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total

В дальнейшем, просто не забудьте:

  • Редактировать файлы в src/
  • Запуск тестов в lib/
...