4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Jest】import文で『SyntaxError: Cannot use import statement outside a module』が発生するときの対処

Last updated at Posted at 2023-07-11

はじめに

Jestでテストを動かそうとしたときに『Jest encountered an unexpected token』や『SyntaxError: Cannot use import statement outside a module』のエラーが発生して、毎度初期設定のやり方をググっている気がするので、n番煎じですがざっとまとめることにしました。

あとこのエラー文での記事がほぼないので、初心者が辿りやすいようにということで。

直接原因:JestのデフォルトではESMをサポートしていない

JestではECMAScriptModule (ESM)はまだ実験的なサポートのみで、デフォルトではimport/export文は利用できません。

なので、Babelを使って、Jest実行時のタイミングにCommonJSの形式に変換してあげる必要があります。

対処方法

その1:Babelのインストール

下記コマンドを実行します。

$ npm install --save-dev babel-jest @babel/core @babel/preset-env

yarnの場合はこちら。

$ yarn add --dev babel-jest @babel/core @babel/preset-env

その2:ディレクトリ直下にbabel.config.jsを追加する

新規でファイル作成して、下記を貼り付けします。

babel.config.js
module.exports = {
  presets: [
    [
      "@babel/preset-env",
      {
        modules: "false",
        useBuiltIns: "usage",
        targets: "> 0.25%, not dead",
      },
    ],
  ],
  env: {
    test: {
      presets: [["@babel/preset-env", { targets: { node: "current" } }]],
    },
  },
};

その3:テスト実行!

これで通りますね〜
スクリーンショット 2023-07-12 1.50.25.png

その他ポイント:package.jsonのtypeには何も指定しない or "commonjs"を指定する

importまわりのエラーが出たので何も考えずにこのあたりをいじりまくったことが記憶にあるのですが、package.jsonのtypeは書かないか、"type": "commonjs"にしましょう。

package.json
{
  "main": "./src/index.js",
  "type": "commonjs",
  "scripts": {
    "test": "jest"
~~~~ 省略 ~~~~
  }

参考記事

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?