如何将jest与coffeescript和ES6/ES2015结合使用(例如通过巴贝尔)?
我的团队在我们的项目中使用了coffeescript和ES6/ES2015(通过Babel)。由于Babel的存在,这些文件最终是兼容的,所以它工作得很好。但我不明白我们如何编写一个既允许这两种测试,又允许这两种测试的笑话测试 我找到了如何将jest与咖啡或ES6功能结合使用的示例,但并非两者都有:如何将jest与coffeescript和ES6/ES2015结合使用(例如通过巴贝尔)?,coffeescript,ecmascript-6,webpack,jestjs,jest-webpack-alias,Coffeescript,Ecmascript 6,Webpack,Jestjs,Jest Webpack Alias,我的团队在我们的项目中使用了coffeescript和ES6/ES2015(通过Babel)。由于Babel的存在,这些文件最终是兼容的,所以它工作得很好。但我不明白我们如何编写一个既允许这两种测试,又允许这两种测试的笑话测试 我找到了如何将jest与咖啡或ES6功能结合使用的示例,但并非两者都有: 某个地方有人建议将预处理器设置为babeljest,如果我只在ES6中使用它,这对我来说很好 这些都有效。但我还是不知道如何将它们结合起来 我试过的 我尝试了自己的解决方案: 在pack
- 某个地方有人建议将预处理器设置为
,如果我只在ES6中使用它,这对我来说很好babeljest
- 我尝试了自己的解决方案:
在
中,我有:package.json
如果我运行一个测试,比如"jest": { "scriptPreprocessor": "<rootDir>/jest-script-preprocessor", "unmockedModulePathPatterns": [ "<rootDir>/node_modules/react", "<rootDir>/node_modules/react-dom", "<rootDir>/node_modules/react-addons-test-utils", "<rootDir>/node_modules/fbjs" ], "testFileExtensions": ["coffee", "cjsx", "js", "jsx"], "moduleFileExtensions": ["coffee", "cjsx", "js", "jsx"] }
,它会很好地加载ES6测试文件。该测试文件将导入正在测试的模块,也就是ES6,这就是它爆炸的地方。它只会在遇到仅ES6语法时说npmtest\uuuu tests\uuuu/sometest.jsx
,如意外保留字
,导入
,等等。确实有,但我知道是ES6导致了问题,因为如果我将测试中的模块更改为仅导出
,它就会爆炸,如果我把它改成非ES6语法,比如导出默认“mystring”
var q=5+5;module.exports=q代码>,它可以很好地导入模块。(当然,这不是一个真正的可测试模块,但它不需要用于概念验证。) 注意那里的
行。我从来没见过他们。因此,这一点很难找到的一个原因是我无法将自己的调试逻辑放入其中。我确信这些行会运行,因为如果我在这些行中加入一些随机语法,它会阻塞。但是没有控制台输出console.log()
- 我已经试过了,这在理论上听起来很棒:你可以在webpack中使用jest,这样你就可以使用你已经设置好的任何预处理器。它给了我相同的错误,即
。我写了意外保留字
- 我找到了,但我不想使用它,因为它需要节点>=5,我想使用节点4.2.3。它也不适用于Jest>=0.8,我想使用Jest 0.8,因为它目前是最新的,我认为它最有可能与live docs和react版本(0.14.6)同步
npm install --save-dev babel-jest
npm install --save-dev coffee-react
在package.json
中:
"jest": {
"scriptPreprocessor": "<rootDir>/jest-script-preprocessor",
"unmockedModulePathPatterns": [
"<rootDir>/node_modules/."
],
"testFileExtensions": ["coffee", "cjsx", "js", "jsx"],
"moduleFileExtensions": ["coffee", "cjsx", "js", "jsx"]
}
它对我不起作用,我在运行jsx文件测试时得到“SyntaxError:意外令牌导入”。
"jest": {
"scriptPreprocessor": "<rootDir>/jest-script-preprocessor",
"unmockedModulePathPatterns": [
"<rootDir>/node_modules/."
],
"testFileExtensions": ["coffee", "cjsx", "js", "jsx"],
"moduleFileExtensions": ["coffee", "cjsx", "js", "jsx"]
}
var babelJest = require('babel-jest');
var coffee = require('coffee-react');
module.exports = {
process: function(src, filename) {
if (filename.indexOf('node_modules') === -1) {
if (filename.match(/\.coffee|\.cjsx/)) {
src = coffee.compile(src, {bare: true});
} else {
src = babelJest.process(src, filename);
}
}
return src;
}
};