1

単体テストでカバーされていないコード行を取得しようとしています。

私はmochaを使用して単体テストを行います。これは、実行しなかった行数を報告するレポーター「json-cov」を提供します。

私は2つのファイルを持っています。最初のファイル(foo.js):

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

そして2番目のもの(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、hits、misss、coverageが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」パッケージが1つだけでなく、「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 = {

ハイライト付き。

編集:タグは、次のコードでjadeテンプレートを介してレンダリングされたため、エスケープされました:td.source= line.source

これを変更して、td.source!= line.source私が抱えていたこの最後の問題を修正します。

4

2 に答える 2

3

エスケープされたコードの問題は、次のようにjscoverageの「--no-highlight」オプションを使用することで、mochaのjadeテンプレートを編集することなく解決できます。

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

私の編集に従って、これを解決するために私が何をしたかを確認してください。

于 2013-02-01T10:15:00.743 に答える