テストにモカとチャイを使ったカルマをインストールしました。 ES6ファイルをES5に変換して実行するために、karma-babel-preprocessorを使用してbabelをkarmaに直接統合しようとしています。 mochaを個別に使用すると、babel、つまりmocha testコマンドで機能しますが、代わりにkarmaを使用しようとしますが機能しません。
karma.conf.jsスニペット:
frameworks: ['mocha', 'chai'],
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
'src/**/*.js': ['babel'],
'test/**/*_spec.js': ['babel']
},
"babelPreprocessor": {
options: {
presets: ['es2015'],
sourceMap: 'inline'
},
filename: function(file) {
return file.originalPath.replace(/\.js$/, '.es5.js');
},
sourceFileName: function(file) {
return file.originalPath;
}
},
// list of files / patterns to load in the browser
files: [
'src/**/*.js',
'test/**/*_spec.js'
],
package.jsonスニペット:
"scripts": {
"test": "./node_modules/karma/bin/karma start karma.conf.js"
},
"babel": {
"presets": ["es2015"]
},
"devDependencies": {
"babel-preset-es2015": "^6.1.18",
"chai": "^3.4.1",
"karma": "^0.13.15",
"karma-babel-preprocessor": "^6.0.1",
"karma-chai": "^0.1.0",
"karma-mocha": "^0.2.1",
"karma-phantomjs-launcher": "^0.2.1",
"phantomjs": "^1.9.18",
"redux": "^3.0.4"
}
次のエラーが発生します。
PhantomJS 1.9.8 (Mac OS X 0.0.0) ERROR
ReferenceError: Can't find variable: exports
at Users/alexgurr/BT/FutureVoice/trunk/Portal/server/src/login.es5.js:3
ロードされているJSファイルを評価するとき、それらはES5に変換されていないため、構文「export」はまだ存在しています。
変換に他のフレームワークを使用したくありません。 webpack、browserifyなど。
ありがとう!
私は過去数時間同じ問題に苦しんでいます。あなたのユースケースが私のものと同じかどうかはわかりませんが、私はついにそれを理解しました。
テスト中のコードsrc/foo.js
:
var foo = "foo value";
export default foo;
テストコードtests/foo.spec.js
:
import foo from "../src/foo.js";
describe('Foo', function() {
it('should be "foo value"', function() {
expect(foo).toBe('foo value');
});
});
karma.conf.js
ファイル前:
{
// other configs
files: [
'src/**/*.js',
'tests/**/*.spec.js',
],
preprocessors: {
'src/**/*.js': ['babel'],
'tests/**/*.spec.js': ['babel'],
},
babelPreprocessor: {
options: {
"presets": ["es2015"]
}
}
}
これにより、表示されたReferenceError: Can't find variable: exports
エラーが発生しました。
修正:
npm install --save-dev babel-plugin-transform-es2015-modules-umd
karma.conf.js
に以下を追加します
babelPreprocessor: {
options: {
"presets": ["es2015"],
"plugins": ["transform-es2015-modules-umd"]
}
}
その後、エラーはなくなりました。
また、次のexport
宣言( 正しいはずです )は機能しないことに注意してください。
// exports an object
export default var foo = "something";
// exports undefined
export var bar = "something else";
問題は、ブラウザーでCommonJSモジュールを実行できるようにファイルをバンドル/ラップしなかったことです(Babelはes2015モジュールをCommonJSにトランスパイルし、CJSはノードのデフォルトのモジュールシステムであり、Karmaがテストを実行するブラウザーではないため) 。したがって、オプションは次のとおりです。
プリセットだけでなく、まだバベルが必要だと思います。
npm i babel --save-dev
私のプロジェクトの1つでほぼ同じ構成を使用しています。つまり、karmaでファイルをその場で前処理できます。唯一の違いは、babeljsもインストールしたことです。
お役に立てれば。
乾杯