React アプリを ES6 で作成しました。今度は、ES6 でもテストを書きたいと思います。したがって、ここでの課題は、カルマを構成することです。
Google と一緒に、karma.config.js でここまで来ました (構成ファイルの同じ部分を省略しました!):
...
files: [
'../node_modules/karma-babel-preprocessor/node_modules/babel-core/browser-polyfill.js',
'../app/**/*.jsx',
'../test/**/*.jsx'],
preprocessors: {
'app/**/*.jsx': ['react-jsx', 'babel'],
'test/**/*.jsx': ['react-jsx', 'babel']
},
'babelPreprocessor': {
options: {
sourceMap: 'inline'
},
filename: function(file) {
return file.originalPath.replace(/\.jsx$/, '.es5.js');
},
sourceFileName: function(file) {
return file.originalPath;
}
},
....
このセットアップですべきこと: 1) JSX を JS にコンパイルし、次にbabel
ES6 を ES5 に変換する必要があります。これと一緒に、polyfill
たとえばphantomjsで実行する必要があると予想しました。しかし、いいえ、実行したときのカルマからの出力は次のとおりです。
PhantomJS 1.9.8 (Mac OS X) ERROR
SyntaxError: Parse error
at Projects/ES6/app/js/app.jsx:35
PhantomJS 1.9.8 (Mac OS X): Executed 0 of 0 ERROR (0.027 secs / 0 secs)
[20:36:59] Karma has exited with 1
の 35 行目にapp.jsx
は、実際の JSX 部分が含まれています。そのため、何らかの理由でプリプロセッサはあまり機能していないようです。プリプロセッサに関するヘルプをいただければ幸いです。
更新:私はこれをほとんど機能していません。私が持っていたプリプロセッサは、このように交換する必要があることがわかりました
'../app/**/*.jsx': ['babel', 'react'],
'../test/**/*.jsx': ['babel', 'react']
これを実行すると、次のようになります。
Uncaught ReferenceError: require is not defined
そのためのポリフィルがあると思いました:(