如何将jest与coffeescript和ES6/ES2015结合使用(例如通过巴贝尔)?

如何将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

我的团队在我们的项目中使用了coffeescript和ES6/ES2015(通过Babel)。由于Babel的存在,这些文件最终是兼容的,所以它工作得很好。但我不明白我们如何编写一个既允许这两种测试,又允许这两种测试的笑话测试

我找到了如何将jest与咖啡或ES6功能结合使用的示例,但并非两者都有:

  • 某个地方有人建议将预处理器设置为
    babeljest
    ,如果我只在ES6中使用它,这对我来说很好
这些都有效。但我还是不知道如何将它们结合起来

我试过的
  • 我尝试了自己的解决方案:

    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"]
    }
    
    如果我运行一个测试,比如
    npmtest\uuuu tests\uuuu/sometest.jsx
    ,它会很好地加载ES6测试文件。该测试文件将导入正在测试的模块,也就是ES6,这就是它爆炸的地方。它只会在遇到仅ES6语法时说
    意外保留字
    ,如
    导入
    导出
    ,等等。确实有,但我知道是ES6导致了问题,因为如果我将测试中的模块更改为仅
    导出默认“mystring”
    ,它就会爆炸,如果我把它改成非ES6语法,比如
    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;
    }
};