Karma Coverage和Babel + Browserify预处理

时间:2015-06-10 08:45:58

标签: javascript reactjs karma-runner karma-coverage isparta

我使用Karma来测试我的ES6代码。当我添加basePath: '', browserNoActivityTimeout: 100000, frameworks: ['phantomjs-shim', 'mocha', 'chai', 'browserify'], files: [ './client/**/*.js', './client/**/*.spec.js' ], exclude: [ './client/dist/*.js', ], preprocessors: { './client/**/*.js': ['browserify', 'sourcemap', 'coverage'] }, browserify: { debug: true, transform: [ ['babelify', { optional: ["runtime"], plugins: ["rewire"] }], ] }, coverageReporter: { instrumenters: { isparta : require('isparta') }, instrumenter: { '**/*.js': 'isparta' }, type : 'html', dir : './coverage/' }, reporters: ['mocha', 'coverage'], port: 9876, colors: true, logLevel: config.LOG_INFO, autoWatch: false, browsers: ['Chrome', 'Firefox', 'Safari', 'PhantomJS'], singleRun: true 混合时,我需要添加覆盖工具的所有源文件以生成有用的报告,但是当我这样做时,Karma在所有浏览器中都给出了这个错误:

  

PhantomJS 1.9.8(Mac OS X 0.0.0)错误

     

错误:不变违规:_registerComponent(...):目标容器不是DOM元素。

     

at /var/folders/55/9_128mq95kz1q_2_vwy7qllw0000gn/T/41cf272955d73fbba8ad1df941172139.browserify:46444:0< - ../../ node_modules / react / lib / invariant.js:49:0

我的Karma配置文件是:

'./client/**/*.js',

如果我从files数组中删除gulp-karma,则测试会起作用,但覆盖范围只显示测试代码。我使用val a = Array(1,2,3,4,5,6,7,8,9) val rdd = sc.parallelize(a) rdd.foreachPartition { partition => println("1. partition.size: " + partition.size) //1. partition.size: 2 println("2. partition.size: " + partition.size) //2. partition.size: 0 } 吞下了Karma,但我认为这与问题无关。

2 个答案:

答案 0 :(得分:0)

我有同样的问题,在我的情况下发生了,因为React无法找到需要渲染html的元素。

我通过在主js文件中添加以下if语句找到了一个快速解决方法:

if ($('#container').length <= 0) {
  $('body').prepend('<div id="container"></div>');
}

ReactDom.render(
  <App />,
  document.getElementById('container')
);

我知道这绝不是修复它的最好方法,但至少它现在有效。如果有人知道更好的方法,请告诉我们!

答案 1 :(得分:0)

您要覆盖的代码是尝试将组件呈现到DOM节点中。您的代码依赖于它已经存在(在index.html或其他任何地方)。但是PhantomJS无法找到那个DOM节点。 您应该在调用ReactDOM.render之前创建它,或者搜索如何更改幻像使用的html页面的模板来运行测试(这里有插件)。