我正在尝试获取我的单元测试未涵盖的代码行。
我用摩卡进行单元测试,它提供了一个报告器"json-cov",它应该报告我没有执行多少行。
我有两个文件,第一个(foo.js):
module.exports = function () {
for (var result = 0, i = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
}
第二个(测试.js):
var expect = require('expect.js'),
jsc = require('jscoverage'),
//foo = require('./foo.js');
foo = jsc.require(module, './foo.js');
describe('foo', function () {
it('should add all arguments', function () {
expect(foo(1,1)).to.be(2);
});
});
当我运行mocha -R json-cov test.js
时,我得到以下结果:
{
"instrumentation": "node-jscoverage",
"sloc": 0,
"hits": 0,
"misses": 0,
"coverage": 0,
"files": [],
"stats": {
"suites": 1,
"tests": 1,
"passes": 1,
"pending": 0,
"failures": 0,
"start": "2013-01-30T18:00:15.785Z",
"end": "2013-01-30T18:00:15.787Z",
"duration": 2
},
"tests": [
{
"title": "should add all arguments",
"fullTitle": "foo should add all arguments",
"duration": 1
}
],
"failures": [],
"passes": [
{
"title": "should add all arguments",
"fullTitle": "foo should add all arguments",
"duration": 1
}
]
}
我做错了什么,以至于 sloc、命中、未命中和覆盖率为 0?
我还尝试使用节点require
而不是 jscs,但没有成功。
编辑:我刚刚尝试了mocha -R json-cov test.js --coverage
如果我使用jscs require
会导致错误。当我使用节点require
时,结果与上面相同。
编辑:我什至无法从控制台运行jscoverage。我创建了一个文件夹foo和foo-cov,并在文件夹foo中复制了我的foo.js。然后我运行了jscoverage foo foo-cov
这给了我一个错误abs source path or abs dest path needed!
。我还尝试了绝对路径和其他一些方法来安排参数。没有成功。如何为 jscoverage 准备文件?
编辑:如果它有任何相关性,我正在使用Windows。
编辑:刚刚意识到通过npm不仅有一个"jscoverage"包,还有一个"visionmedia-jscoverage"。尝试安装该版本失败。可能是因为Windows与Linux。
编辑:让它工作。我现在只需从控制台运行 jscoverage.exe(从这里下载),然后使用 mocha -R html-cov test.js > coverage.html
而不是使用节点包来准备代码。现在我遇到了一些代码被转义的问题。所以我得到
<span class="k">var</span> foo <span class="k">=</span> <span class="k">{</span>
而不是
var foo = {
突出显示。
编辑:标签被转义,因为它们是通过带有以下代码的玉模板呈现
的:td.source= line.source
将其更改为td.source!= line.source
可以解决我遇到的最后一个问题。
转义代码问题可以通过使用"--no-highlight"选项进行jscoverage来解决,而无需编辑摩卡的玉石模板,如下所示:
jscoverage --no-highlight foo foo-cov
关注我的编辑,看看我做了什么来解决这个问题。