現在テストのない既存のプロジェクトにテストを実装しています。私のテストはnode_modules/
インポートをコンパイルできません。
/Users/me/myproject/node_modules/lodash-es/lodash.js:10
export { default as add } from './add.js';
^^^^^^
SyntaxError: Unexpected token export
at transformAndBuildScript (node_modules/jest-runtime/build/transform.js:320:12)
at Object.<anonymous> (app/reducers/kind_reducer.js:2:43)
at Object.<anonymous> (app/reducers/index.js:12:47)
私が見つけた回避策は、次のようなpackage.json jest configの「ホワイトリスト」node_modules
です。
"jest": {
"transformIgnorePatterns": [
"!node_modules/"
]
}
これは、node_modules/lodash-es/lodash.js
をインポートする簡単なテストを実行するのに1分以上かかるため、ハックのように見えます。
助けや指示はありがたいです、ありがとう!
これを.jestconfig
に追加する必要がありました。
"transformIgnorePatterns": [
"<rootDir>/node_modules/(?!lodash-es)"
]
上記の解決策のどれもうまくいかなかった場合は、あなたの趣味でこれを試すことができます
"moduleNameMapper": {
"^lodash-es$": "lodash"
}
ランタイムのテスト中に、lodash-es
をcommonjsバージョンに置き換えます。
より完全な回答をここに投稿:
Node_modulesは非常に大きいため、デフォルトではJestはnode_modulesを変換しません。ほとんどのノードモジュールは、ES5コードを公開するためにパッケージ化されています。これは、ES5コードをさらに変換することなく実行できるためです(そして、大部分は後方互換性があります)。
あなたの場合、lodash-esはESモジュールを具体的に公開します。ESモジュールはJestがbabel経由でビルドする必要があります。
ホワイトリストを絞り込んで、Jestがnode_modules内のすべてのjavascriptファイルをbabel経由で渡そうとしないようにすることができます。
あなたの場合の正しい構成は次のとおりです:
"jest": {
"transformIgnorePatterns": [
"/!node_modules\\/lodash-es/"
]
}