2

カルマ カバレッジを使用して、typescript ソース ファイルのカバレッジ レポートを生成するのが好きです。私の単体テストは JavaScript で書かれており、Jasmine Test フレームワークを使用しています。

私のフォルダ構造は次のようになります。

node_modules/
app/
  app.js
  app.js.map
  app.ts
  components/
  controllers/
      SampleController.ts
  directives/
  filters/
  services/

unittests/
  karma.conf.js
  components/
  controllers/
      SampleControllerTest.js
  directives/
  filters/
  services/

私のkarma.conf.js

module.exports = function(config) {
  config.set({
    frameworks: ['jasmine'],
    plugins: [
          'karma-jasmine',
          'karma-ng-html2js-preprocessor',
          'karma-coverage',
          'karma-phantomjs-launcher',
          'karma-sourcemap-loader'

      ],
    preprocessors: {
        '../app/directives/controls/**/*Template.html' : [ 'ng-html2js' ],

            // source files, that you wanna generate coverage for
            // do not include tests or libraries
            // (these files will be instrumented by Istanbul)
        '../app/app.js' : ['sourcemap', 'coverage' ],

    },
    reporters: ['progress', 'coverage'],

    // web server port
    port: 9876,

    coverageReporter: {
          type : 'html',
          dir : 'coverage/'
      },
    // and some other stuff
  });
};

現在、私のカバレッジ レポートは十分なメトリクスを提供していますが、単一の typescript ファイルではなく app.js には関連していません。

プリプロセッサ構成で何かを台無しにしたか、ソースマップを指定する必要があると思います。

アニーのヒント?

4

1 に答える 1

6

karma-istanbul-remap を使用するとうまくいきます。

カルマ.conf.js:

module.exports = function(config) {
  config.set({
    frameworks: ['jasmine'],
    plugins: [
          'karma-jasmine',
          'karma-ng-html2js-preprocessor',
          'karma-coverage',
          'karma-phantomjs-launcher',
          'karma-remap-istanbul'

      ],
    preprocessors: {
        '../app/directives/controls/**/*Template.html' : [ 'ng-html2js' ],

            // source files, that you wanna generate coverage for
            // do not include tests or libraries
            // (these files will be instrumented by Istanbul)
        '../app/app.js' : ['coverage' ],

    },
    reporters: ['progress', 'coverage', 'karma-remap-istanbul'],

    // web server port
    port: 9876,

    coverageReporter: {
        type : 'json',
        subdir : '.',
        dir : 'coverage/',
        file : 'coverage.json'
    },
    remapIstanbulReporter: {
          src: 'coverage/coverage.json',
          reports: {
              lcovonly: 'coverage/lcov.info',
              html: 'coverage/html/report'
          },
          timeoutNotCreated: 5000, // default value
          timeoutNoMoreFiles: 1000 // default value
    },
    // and some other stuff
  });
};
于 2016-04-18T11:03:50.427 に答える