我用ES6写了我的React应用程序。现在我也想使用ES6编写我的测试。因此,这里的挑战是配置karma。
与谷歌一起,我已经通过karma.config.js做到了这一点(我省略了相同的配置文件部分!):
我认为这个设置应该做到以下几点:1)编译JSX为JS,接下来的
现在,当我运行这个程序时,得到的结果是:
我本以为我有该补丁 :(
与谷歌一起,我已经通过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等环境中运行了。但当我运行时,karma输出的结果是这样的: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
app.jsx
的第35行包含了实际的JSX部分。但是,由于某些原因,预处理器似乎没有做太多工作。如果有关于预处理器的任何帮助,将不胜感激。
更新:我现在几乎完成了这个项目。事实证明,我之前使用的预处理器应该交换位置。
'../app/**/*.jsx': ['babel', 'react'],
'../test/**/*.jsx': ['babel', 'react']
现在,当我运行这个程序时,得到的结果是:
Uncaught ReferenceError: require is not defined
我本以为我有该补丁 :(
browserify
和babelify
。你的项目似乎处理JSX,但不支持ES6。这只是在WebPack中进行微调吗(我没有使用过webpack)? - Jeanluca Scaljeri