1

我正在尝试获取我的单元测试未涵盖的代码行。

我用 mocha 进行单元测试,它提供了一个报告器“json-cov”,它应该报告我没有执行多少行。

我有两个文件,第一个(foo.js):

module.exports = function () {
    for (var result = 0, i = 0; i < arguments.length; i++) {
        result += arguments[i];
    }
    return result;
}

第二个(test.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.js 复制到文件夹 foo 中。然后我跑了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解决我遇到的最后一个问题。

4

2 回答 2

3

可以通过使用 jscoverage 的“--no-highlight”选项来解决转义代码问题,而无需编辑 mocha 的玉模板,如下所示:

jscoverage --no-highlight foo foo-cov
于 2013-05-27T10:06:22.327 回答
0

按照我的编辑,看看我做了什么来解决这个问题。

于 2013-02-01T10:15:00.743 回答