【发布时间】:2015-04-03 18:49:52
【问题描述】:
我已经用 ES6 编写了我的 React 应用程序。现在我也想用 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 中运行。但是不,这是我运行 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 部分。所以,由于某种原因,预处理器似乎没有那么多。任何有关预处理器的帮助将不胜感激?
更新:我有这个几乎可以工作的 nog。原来我的预处理器应该像这样交换
'../app/**/*.jsx': ['babel', 'react'],
'../test/**/*.jsx': ['babel', 'react']
现在,当我运行它时,我得到:
Uncaught ReferenceError: require is not defined
我以为我有一个 polyfill :(
【问题讨论】:
-
你在使用 webpack 来构建你的资产吗?我有一篇关于如何使用 Webpack 作为测试预处理器来设置 Karma 的帖子:qiita.com/kimagure/items/f2d8d53504e922fe3c5c 老实说,我从来没有费心尝试单独使用 babel。
-
我使用
browserify和babelify。您的项目似乎处理 JSX,但不是 ES6。这只是 WebPack 中的一个调整(我没有使用过 webpack)吗? -
不应该加载输出 JS 文件而不是输入 JSX 吗? (我对 JSX 不熟悉,但是之前也搭建过这样的 ES6/Babel 项目)
-
这是可能的,但是您总是必须先构建,然后才能进行测试。这样,业力就完成了所有工作!
标签: javascript reactjs karma-runner react-jsx babeljs