1. ホーム
  2. ecmascript-6

[解決済み] JestはES6のインポート/エクスポートをサポートしていますか?

2022-07-18 22:52:18

質問

もし私が import/export を使用した場合、Jestのテストはすべてエラーで失敗します。

予期しない予約語

テスト中のオブジェクトを変換して、古い形式の IIFE 構文に変換すると、突然テストが通ります。あるいは、もっと単純なテストケースを考えてみましょう。

   var Validation = require('../src/components/validation/validation'); // PASS
   //import * as Validation from '../src/components/validation/validation' // FAIL

同じエラーです。明らかに、インポート/エクスポートに問題があります。テストフレームワークを満足させるために、ES5構文を使用して私のコードを書き直すことは現実的ではありません。

私はbabel-jestを持っています。私はさまざまな の提案 をGitHubのissueから試してみました。 今のところダメです。

ファイル パッケージ.json

 "scripts": {
    "start": "webpack-dev-server",
    "test": "jest"
  },
      "jest": {
        "testPathDirs": [
          "__tests__"
        ],
        "testPathIgnorePatterns": [
          "/node_modules/"
        ],
        "testFileExtensions": ["es6", "js"],
        "moduleFileExtensions": ["js", "json", "es6"]
      },

ファイル babelrc

{
  "presets": ["es2015", "react"],
  "plugins": ["transform-decorators-legacy"]
}

これの修正方法はあるのでしょうか?

どのように解決するのですか?

UPDATE 2020 - ECMAScript モジュール (ESM) のネイティブ サポート。


によると この問題 からの ESM のネイティブサポートがあります。 [email protected] . ですから、もうバベルを使う必要はないでしょう。この回答を書いている時点(2020年5月)では、これを有効にするには、3つの簡単なことを行う必要があります。

  • トランスフォームしないことを確認します。 import ステートメントを transform: {} を設定します。
  • 実行する node@^12.16.0 || >=13.2.0--experimental-vm-modules フラグ
  • テストを実行するには jest-environment-node または jest-environment-jsdom-sixteen .

というわけで、Jestの設定ファイルには最低限このような内容が含まれている必要があります。

export default {
    testEnvironment: 'jest-environment-node',
    transform: {}
    ...
};

そして --experimental-vm-modules フラグを設定するには、以下のようにJestを実行する必要があります。

node --experimental-vm-modules node_modules/jest/bin/jest.js

また、Github の課題では、この方法はまだ jest オブジェクトをサポートしていません。そのため、手動でインポートする必要があるかもしれません。

import {jest} from '@jest/globals'

( 将来的に変わることを期待しています )