2015-11-25 99 views
10

我們已經安裝了karma,它使用摩卡和chai進行測試。我們試圖使用karma-babel預處理器將babel直接集成到業力中,以將我們的ES6文件轉換爲ES5來運行。使用摩卡單獨使用巴貝爾,即摩卡測試命令,但我們嘗試使用業力,而不是工作。Babel [karma-babel-preprocessor]不轉換ES6-> ES5進行Karma測試

karma.conf.js片段:

frameworks: ['mocha', 'chai'], 

// preprocess matching files before serving them to the browser 
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 
preprocessors: { 
    'src/**/*.js': ['babel'], 
    'test/**/*_spec.js': ['babel'] 
}, 

"babelPreprocessor": { 
    options: { 
     presets: ['es2015'], 
     sourceMap: 'inline' 
    }, 
    filename: function(file) { 
     return file.originalPath.replace(/\.js$/, '.es5.js'); 
    }, 
    sourceFileName: function(file) { 
     return file.originalPath; 
    } 
}, 

// list of files/patterns to load in the browser 
files: [ 
    'src/**/*.js', 
    'test/**/*_spec.js' 
], 

的package.json片段:

"scripts": { 
    "test": "./node_modules/karma/bin/karma start karma.conf.js" 
}, 

"babel": { 
    "presets": ["es2015"] 
}, 

"devDependencies": { 
    "babel-preset-es2015": "^6.1.18", 
    "chai": "^3.4.1", 
    "karma": "^0.13.15", 
    "karma-babel-preprocessor": "^6.0.1", 
    "karma-chai": "^0.1.0", 
    "karma-mocha": "^0.2.1", 
    "karma-phantomjs-launcher": "^0.2.1", 
    "phantomjs": "^1.9.18", 
    "redux": "^3.0.4" 
} 

我們得到以下錯誤:

PhantomJS 1.9.8 (Mac OS X 0.0.0) ERROR 
    ReferenceError: Can't find variable: exports 
    at Users/alexgurr/BT/FutureVoice/trunk/Portal/server/src/login.es5.js:3 

當我們評估的JS文件是已加載,它們尚未轉換爲ES5,因此語法'export'仍然存在。

我們不想使用任何其他框架進行轉換,即。 webpack,browserify等。

謝謝!

回答

0

我認爲你仍然需要babel,而不僅僅是預設。

npm i babel --save-dev

我幾乎對我的項目之一相同的配置,這意味着讓業報前處理上飛我的文件,我的唯一的區別是,我已經安裝了babeljs也。

希望這會有所幫助。

乾杯

+0

顯然,文件_was_ transpiled。可能Babel只是在全球安裝('npm install -g babel'),以防止本地'node_modules'不受控制地增長 – ankhzet

10

我一直在努力與同樣的問題在過去的幾個小時。我不確定你的用例是否與我的用例相同,但我終於明白了。被測src/foo.js

代碼:

var foo = "foo value"; 
export default foo; 

測試代碼tests/foo.spec.js:前

import foo from "../src/foo.js"; 
describe('Foo', function() { 
    it('should be "foo value"', function() { 
     expect(foo).toBe('foo value'); 
    }); 
}); 

karma.conf.js文件:

{ 
    // other configs 
    files: [ 
     'src/**/*.js', 
     'tests/**/*.spec.js', 
    ], 
    preprocessors: { 
     'src/**/*.js': ['babel'], 
     'tests/**/*.spec.js': ['babel'], 
    }, 

    babelPreprocessor: { 
     options: { 
      "presets": ["es2015"] 
     } 
    } 
} 

這產生你看到的ReferenceError: Can't find variable: exports錯誤。

的修復:

  • npm install --save-dev babel-plugin-transform-es2015-modules-umd
  • 添加下列karma.conf.js

    babelPreprocessor: { 
        options: { 
         "presets": ["es2015"], 
         "plugins": ["transform-es2015-modules-umd"] 
        } 
    } 
    

然後錯誤走了。

此外,請注意以下export聲明(which I believe should be correct)不起作用。

// exports an object 
export default var foo = "something"; 

// exports undefined 
export var bar = "something else"; 
+0

這就是我需要的答案。因爲我只是在Node上工作,所以我不想添加Webpack或Browserify。謝謝! – Fernando

0

的問題是,你還沒有綁定/包裝你的文件能夠在瀏覽器中執行CommonJS的模塊(因爲巴貝爾transpile ES2015模塊分成CommonJS的和CJS是默認的模塊系統的節點,而不是瀏覽器Karma運行測試)。所以,你的選擇是: