[解決済み] mochaのテスト実行時にBabelの予期せぬトークンがインポートされる
質問
.babelrcに適切なプリセット(es2015)を含めるなど、他の関連する質問で提供された解決策は、私のプロジェクトですでに実装されています。
私は、ES6モジュール構文を使用する2つのプロジェクト(AとBと呼ぶことにします)を持っています。 プロジェクトAでは、npm経由でインストールされ、node_modulesフォルダに住んでいるプロジェクトBをインポートしています。プロジェクトAのテストスイートを実行すると、エラーが発生します。
SyntaxError: 予期しないトークンのインポート
その前に、プロジェクトBの誤ったコードとされるこの行があります。
(function (exports, require, module, __filename, __dirname) { import createBrowserHistory は 'history/lib/createBrowserHistory' から。
私のソースファイルには "import createBrowserHistory from 'history/lib/createBrowserHistory'; しか含まれていないので、iifeはnpmかおそらくbabelに関連するもののようです。プロジェクトBのテストスイートのユニットテストはうまく動作し、プロジェクトAから依存としてプロジェクトBを削除すると、私のテストスイートは(まだ内部プロジェクトのモジュールにes6インポートを使って)問題なく動作します。
フルスタックトレース
SyntaxError: Unexpected token import
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:374:25)
at Module._extensions..js (module.js:405:10)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:138:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (actionCreators.js:4:17)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapper.js:28:23)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapperSpec.js:15:16)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at /ProjectA/node_modules/mocha/lib/mocha.js:219:27
at Array.forEach (native)
at Mocha.loadFiles (/ProjectA/node_modules/mocha/lib/mocha.js:216:14)
at Mocha.run (/ProjectA/node_modules/mocha/lib/mocha.js:468:10)
at Object.<anonymous> (/ProjectA/node_modules/mocha/bin/_mocha:403:18)
at Module._compile (module.js:398:26)
at Object.Module._extensions..js (module.js:405:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Function.Module.runMain (module.js:430:10)
at startup (node.js:141:18)
at node.js:980:3
以下は、package.jsonにある私のテストコマンドです。
"test": "mocha --compilers js:babel-core/register '+(test|src)/**/*Spec.js'"
このStackOverflowの投稿は類似していますが、私のコマンドラインの使用に対する解決策を提供していません。 node_modules から babel でモジュールをインポートしようとしたが失敗した。
どうすればいいですか?
明示的にインクルードする以外に解決策はないようです。
require('babel-core/register')({
ignore: /node_modules/(?!ProjectB)/
});
をテストヘルパーファイルに記述し、それをテストコマンドでmochaに渡します。
mocha --require ./test/testHelper.js...
最終的な解決策
追加 registerBabel.js : babel-core/register を必要とする別のファイルです...
require('babel-core/register')({
ignore: /node_modules/(?!ProjectB)/
});
を追加します。 entry.js あなたのアプリケーションがbabel-nodeにも依存している場合。これは、es6を含むアプリケーションのラッパーとして機能します。
require('./registerBabel');
require('./server'); // this file has some es6 imports
そして、アプリケーションを実行する際に
node entry
mochaのテスト用。 testHelper.js は、実行時にバベルサポートを初期化するために、registerBabel.jsも必要とします。
require('./registerBabel');
そして、mochaのテストを実行するには
mocha --require ./testHelper.js '+(test)/**/*Spec.js'
これは "./test" 内の "Spec.js" で終わるすべてのファイルを再帰的にテストします。このパターンは、プロジェクト内の仕様に一致するものに置き換えてください。
関連
-
[解決済み】AWS Lambdaでnodejsの「ref」モジュールを使用すると「invalid ELF header」と表示される件
-
[解決済み】 console.logの出力をどこに永久保存するか?
-
[解決済み】モジュール 'internal/util/types' が見つかりません。
-
[解決済み】「npm install」と「npm rebuild」の違いとは?
-
[解決済み】Mongooseで、日付でソートするにはどうしたらいいですか?(node.js)
-
[解決済み] nodeファイルの先頭にある"/usr/bin/env node "は、具体的には何をするのですか?
-
[解決済み] TypeError: コールバックはnodejsの関数ではありません。
-
[解決済み] Node.jsで「btoaが定義されていない」エラーが発生する
-
[解決済み] ReferenceError: describe は定義されていません NodeJs
-
[解決済み] ランタイム 'node' が PATH で見つからない - Visual Studio Code と Node.js
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】mongoError: トポロジーが破壊されました
-
[解決済み] テスト
-
[解決済み】Discord.js が特定のチャンネルにメッセージを送信する場合
-
[解決済み】passport.js passport.initialize() ミドルウェアが使用されていません。
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み] Passport JSのreq.isAuthenticated()はどのように実装されていますか?[クローズド]
-
[解決済み] E: npm パッケージを見つけることができません。
-
[解決済み] Yarn にパッケージを強制的に再インストールさせるにはどうしたらいいですか?
-
[解決済み] ランタイム 'node' が PATH で見つからない - Visual Studio Code と Node.js
-
[解決済み] DynamoDBで一括削除するにはどうしたらいいですか?