简体   繁体   English

如何使用karma,typescript和browserify进行代码覆盖

[英]How to do code coverage with karma, typescript, and browserify

How do you setup karma test runner to generate code coverage reports of a typescript project? 如何设置karma测试运行器以生成打字稿项目的代码覆盖率报告?

Given the following folder structure and karma.conf.js file I'm already using karma to run my tests written in TypeScript. 鉴于以下文件夹结构和karma.conf.js文件,我已经在使用karma来运行用TypeScript编写的测试。

I already fiddled around with karma-coverage and remap-istanbul but without any luck yet. 我已经摆弄了karma-coverageremap-istanbul但还没有任何运气。 If possible I'd like to do it without any additional npm scripts . 如果可能的话我想在没有任何额外的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 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']
  })
}

Update 1: 更新1:

I made some progress by adding browserify-istanbul to the setup. 我通过将browserify-istanbul添加到设置中取得了一些进展。 I think the overall metrics are fine but the source file view is a bit odd. 我认为整体指标很好,但源文件视图有点奇怪。

源文件视图

addSpec.ts 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)
  })
})

Update 2: 更新2:

Until today I could not figure out a way to create an "integrated" karma setup with browserify and typescript. 直到今天,我还无法找到一种方法来创建一个使用browserify和typescript的“集成”业力设置。 Nevertheless I have a different solution that is working for me. 不过,我有一个不同的解决方案,对我有用。

karma.conf.js 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 的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"
  },
  ...
}

Install karma-typescript : 安装karma-typescript

npm install karma-typescript --save-dev

Put this in your karma.conf.js: 把它放在你的karma.conf.js中:

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

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

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

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

browsers: ["Chrome"]

This will run your Typescript unit tests on the fly and generate Istanbul html coverage that look like this: 这将动态运行您的Typescript单元测试并生成如下所示的Istanbul html覆盖:

No need for npm scripts etc, all the magic happens in the plugin. 不需要npm脚本等,所有的魔法都发生在插件中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将代码覆盖率添加到Typescript + Webpack + Karma w / Istanbul-Instrumenter - How do I add code coverage to Typescript + Webpack + Karma w/ Istanbul-Instrumenter 如何在打字稿角应用程序中获得100%的业力分支代码覆盖率? - How to get 100% of karma branch code coverage in typescript angular app? vue 2,打字稿,摩卡和业力的代码覆盖率 - Code coverage with vue 2, typescript, mocha and karma 业力-如何指向源地图进行打字稿覆盖 - Karma - How to point to a source map for typescript coverage 使用karma-jasmine和istanbul的Typescript的代码覆盖率 - Code Coverage for Typescript using karma-jasmine and istanbul 如何使用Aurelia和Typescript使业力覆盖? - How to get karma-coverage working with Aurelia and typescript? 您如何使用已编译的Typescript使用Istanbul Code Coverage? - How do you use Istanbul Code Coverage with transpiled Typescript? 使用remap-istanbul + browserify +源地图生成TypeScript代码覆盖率报告时出错 - Error generating TypeScript code coverage reports with remap-istanbul + browserify + source maps Karma覆盖范围未找到文件(angular2 / typescript) - Karma Coverage not finding files (angular2 / typescript) Karma 中 object 内箭头函数的代码覆盖率 - Code coverage for arrow functions inside an object in Karma
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM