我們的團隊已經在我們的項目中使用了coffeescript和ES6/ES2015(通過Babel)。由於這些文件由於Babel而最終兼容,因此它的運行效果非常好。但我無法弄清楚我們如何編寫一個允許兩者兼容的笑話測試。如何在coffeescript和ES6/ES2015上使用jest(例如通過Babel)?
我已經找到了如何使用笑話,咖啡,或ES6特徵的例子,但不能同時:
- Example with coffeescript
- Another example with coffeescript
- Example with Babel
- 某處有人建議設置預處理器作爲
babel-jest
,如果我只在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)同步的機會最大。
它沒有爲我工作,我得到。 – AndrewSouthpaw