2

我們的團隊已經在我們的項目中使用了coffeescript和ES6/ES2015(通過Babel)。由於這些文件由於Babel而最終兼容,因此它的運行效果非常好。但我無法弄清楚我們如何編寫一個允許兩者兼容的笑話測試。如何在coffeescript和ES6/ES2015上使用jest(例如通過Babel)?

我已經找到了如何使用笑話,咖啡,或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"] 
    } 
    

    jest-script-preprocessor.js,我有:

    var coffee = require('coffee-react'); 
    var transform = require('coffee-react-transform'); 
    var babelJest = require("babel-jest"); 
    
    module.exports = { 
        process: function(src, path) { 
         if (coffee.helpers.isCoffee(path)) { 
          console.log(path); 
          return coffee.compile(transform(src), { 
           'bare': true 
          }); 
         } else { 
          console.log(path); 
          return babelJest.process(src, { 
           filename: path, 
           stage: 0 
          }); 
         } 
        } 
    }; 
    

    如果我運行一個像npm test __tests__/sometest.jsx這樣的測試,它會正常加載ES6測試文件。該測試文件將導入正在測試的模塊,這也是ES6,這是它爆炸的地方。它只是說Unexpected reserved word只要它碰到只有ES6的語法,如import,export等。有no additional line information,但我知道是ES6導致的問題,因爲如果我將被測模塊更改爲只有export default 'mystring',如果我將其更改爲非ES6語法(如var q = 5 + 5; module.exports = q;),則會導入模塊。 (當然,這不是真正的可測試模塊,但它不需要用於此概念驗證。)

    請注意那裏的console.log()行。我從來沒有看到他們。因此,追蹤這種技術非常棘手的一個原因是我無法使用我自己的調試邏輯。我確定這些線路運行,因爲如果我在這些線路中引入一些隨機語法,它會窒息。但沒有控制檯輸出。

  • 我試過jest-webpack-alias,這是officially recommended by jest,理論上聽起來很棒:你可以在webpack中使用jest,然後你可以使用你已經設置好的任何預處理器。它給了我同樣的錯誤Unexpected reserved word。我寫了an issue on their github repo

  • 我發現jestpack,但我不希望使用它,因爲它需要節點> = 5,我想使用節點4.2.3。它也不適用於Jest> = 0.8,我想使用Jest 0.8,因爲它是目前最新的,我認爲它與實時文檔和反應版本(0.14.6)同步的機會最大。

回答

0

以下是我正在做的工作對我來說。

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"] 
} 

注意到的unmockedModulePathPatterns。我將它設置爲匹配node_modules中的所有內容。你可能不想要那個,但是如果你開始得到像Error: Failed to get mock metadata:...這樣的錯誤,請考慮它,如recommended here

jest-script-preprocessor.js:運行JSX文件測試時:「意外令牌進口的SyntaxError」

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; 
    } 
}; 
+0

它沒有爲我工作,我得到。 – AndrewSouthpaw

相關問題