我使用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,但我认为这与问题无关。
答案 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页面的模板来运行测试(这里有插件)。