web-dev-qa-db-ja.com

カルマ、TypeScript、browserifyでコードカバレッジを行う方法

TypeScriptプロジェクトのコードカバレッジレポートを生成するために、カルマテストランナーをどのように設定しますか?

次のフォルダー構造とkarma.conf.jsファイルを考えると、TypeScriptで記述されたテストを実行するためにすでにkarmaを使用しています。

私はすでにkarma-coverageremap-istanbulをいじっていますが、まだ運がありません。可能であれば、npm scriptsを追加せずに実行したいと思います。

.
├── karma.conf.js
├── package.json
├── src
│   └── add.ts
├── test
│   └── addSpec.ts
├── tsconfig.json
├── typings
│   ├── globals
│   └── index.d.ts
└── typings.json

karma.conf.js

var istanbul = require('browserify-istanbul');

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['mocha', 'chai', 'sinon', 'browserify'],
    files: [
      'test/**/*Spec.ts'
    ],
    exclude: [
    ],
    preprocessors: {
      'test/**/*Spec.ts': ['browserify']
    },
    browserify: {
      debug: true,
      plugin: ['tsify'],
      transform: [
        istanbul({irgnore: ['**/node_modules/**']})
      ]
    },
    reporters: ['progress', 'coverage']
  })
}

アップデート1:

セットアップにbrowserify-istanbulを追加することで、ある程度の進歩を遂げました。全体的なメトリックは問題ないと思いますが、ソースファイルのビューは少し奇妙です。

source file view

addSpec.ts

import { add } from '../src/add'
const expect = chai.expect

describe('test add module', () => {
  it('should add 2 numbers', () => {
    expect(add(2, 2)).to.be.equal(4)
  })
})

アップデート2:

今日まで、browserifyとTypeScriptを使用して「統合された」カルマセットアップを作成する方法を理解できませんでした。それにもかかわらず、私は私のために働いている別の解決策を持っています。

karma.conf.js

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['source-map-support', 'mocha'],
    files: [
      'test/**/*Spec.ts'
    ],
    exclude: [],
    preprocessors: {
      'test/**/*Spec.ts': ['webpack']
    },
    webpack: {
      devtool: 'inline-source-map',
      resolve: {
        extensions: ['', '.ts', '.js']
      },
      module: {
        loaders: [
          { test: /\.ts$/, exclude: /node_modules/, loader: 'ts-loader', query: { compilerOptions: { inlineSourceMap: true }} }
        ],
        postLoaders: [
          { test: /\.ts$/, include: /src/, loader: 'istanbul-instrumenter' }
        ]
      }
    },
    webpackMiddleware: {
      noInfo: true
    },
    reporters: ['progress', 'coverage'],
    coverageReporter: {
      dir: 'coverage',
      reporters: [
        { type: 'json', subdir: '.', file: 'coverage.json' }
      ]
    },
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Electron'],
    singleRun: false,
    concurrency: Infinity
  })
}

package.json

{
  ...
  "scripts": {
    "test": "rimraf coverage && karma start --single-run && npm run coverage",
    "coverage": "npm run coverage:remap && npm run coverage:report",
    "coverage:remap": "remap-istanbul -i coverage/coverage.json -o coverage/coverage.json -t json",
    "coverage:report": "istanbul report html"
  },
  ...
}
18
Oliver

インストール karma-TypeScript

npm install karma-TypeScript --save-dev

これをkarma.conf.jsに入れてください:

frameworks: ["jasmine", "karma-TypeScript"],

files: [
    { pattern: "src/**/*.ts" }
],

preprocessors: {
    "**/*.ts": ["karma-TypeScript"]
},

reporters: ["progress", "karma-TypeScript"],

browsers: ["Chrome"]

これにより、TypeScript単体テストがオンザフライで実行され、次のようなイスタンブールのhtmlカバレッジが生成されます。

Npmスクリプトなどは必要ありません。すべての魔法はプラグインで発生します。

2
Erik Barke