2015-11-25 69 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运行测试)。所以,你的选择是: