Typescript 使用karma jasmine和istanbul的打字脚本的代码覆盖率

Typescript 使用karma jasmine和istanbul的打字脚本的代码覆盖率,typescript,istanbul,karma-coverage,Typescript,Istanbul,Karma Coverage,我正在尝试使用伊斯坦布尔为karma框架中的typescript代码获取代码覆盖率 在karma.conf中包含了typescript文件,通过karma typescript预处理器,我们可以对typescript代码进行单元测试和代码覆盖,但代码覆盖率报告用于跨堆栈JavaScript代码 如何获取typescript代码的覆盖率报告? 这是我的karma.conf文件 module.exports=函数(配置){ config.set({ //基本路径,将用于解析文件和排除 基本路径:“

我正在尝试使用伊斯坦布尔为karma框架中的typescript代码获取代码覆盖率 在karma.conf中包含了typescript文件,通过karma typescript预处理器,我们可以对typescript代码进行单元测试和代码覆盖,但代码覆盖率报告用于跨堆栈JavaScript代码

如何获取typescript代码的覆盖率报告?

这是我的
karma.conf
文件

module.exports=函数(配置){
config.set({
//基本路径,将用于解析文件和排除
基本路径:“”,
//要使用的框架
框架:['jasmine'],
预处理器:{
'src/***.ts':['typescript','coverage'],
'test/***.ts':['typescript']
},
类型脚本预处理器:{
选项:{
sourceMap:false,//(可选)生成相应的.map文件。
目标:“ES5”,//(可选)指定ECMAScript目标版本:“ES3”(默认)或“ES5”
模块:“amd”,//(可选)指定模块代码生成:“commonjs”或“amd”
noImplicitAny:true,//(可选)警告具有隐含“any”类型的表达式和声明。
noResolve:false,//(可选)跳过解析和预处理。
removeComments:true、//(可选)不向输出发送注释。
concatenateOutput:false//(可选)将输出连接并发送到单个文件。如果省略模块选项,则默认为true,否则为false。
},
//要传递给编译器的额外类型定义(允许全局)
//转换文件名
transformPath:函数(路径){
返回路径.replace(/\.ts$/,'.js');
}
//选项:{
//sourceMap:true,
//}
},
//要在浏览器中加载的文件/图案列表
档案:[
“src/***.ts”,
“test/***.ts”
],
//要排除的文件列表
排除:[
],
//要使用的测试结果报告器
//可能的值:“点”、“进度”、“junit”、“咆哮”、“覆盖”
记者:[“进展”,“报道”],
//web服务器端口
港口:9876,
//启用/禁用输出中的颜色(报告器和日志)
颜色:对,
//记录级别
//可能值:config.LOG_DISABLE | | config.LOG_ERROR | | config.LOG_WARN | | config.LOG_INFO | | config.LOG_DEBUG
日志级别:config.LOG\u INFO,
//启用/禁用监视文件并在任何文件更改时执行测试
自动观察:没错,
//启动这些当前可用的浏览器:
//-铬
//-铬
//-Firefox
//-Opera(必须与“npm安装karma Opera启动器”一起安装)
//-Safari(仅Mac;必须与“npm安装karma Safari启动器”一起安装)
//-幻影
//-IE(仅限Windows;必须与“npm安装karma IE启动器”一起安装)
浏览器:['PhantomJS'],
//如果浏览器在给定的超时[ms]内未捕获,请将其杀死
捕获超时:60000,
//连续集成模式
//如果为true,则捕获浏览器,运行测试并退出
单程:错,
插件:[
“因果报应茉莉花”,
“卡玛铬发射器”,
“卡玛幻影发射器”,
“karma typescript预处理器”,
“业力覆盖”
//需要('../../../node_modules/karma-typescript预处理器/index.js')
]
});

};我们正在为我们的项目使用instanbul重新映射,它工作得非常好。要创建覆盖率报告,我们运行以下shell脚本:

#!/bin/bash

PROJECT_PATH="$(dirname $0)/../"

cd $PROJECT_PATH
echo Creating coverage reports for `pwd`

if [ ! -d "target/dist" ]; then
  echo
  echo "target/dist directory not found. Must compile source with \`npm install\` before running tests."
  echo
  exit 1;
fi

COVERAGE_DIR=target/coverage-raw
REMAP_DIR=target/coverage-ts

mkdir -p $COVERAGE_DIR
mkdir -p $REMAP_DIR

# run coverage on unit tests only
echo Creating coverage reports for unit tests
node_modules/.bin/istanbul cover --dir $COVERAGE_DIR nodeunit `find target/dist/test/ -name *.test.js` > /dev/null

# re-map the coverage report so that typescript sources are shown
echo Remapping coverage reports for typescript
node_modules/.bin/remap-istanbul -i $COVERAGE_DIR/coverage.json -o $REMAP_DIR -t html

echo Coverage report located at $REMAP_DIR/index.html
我们的项目使用nodeunit作为测试工具,因为它是一个节点应用程序。然而,我希望类似的方法也适用于因果报应。

有一种与因果报应完美结合的方法。文档很容易解释,但有一件事-要在控制台上有摘要,配置是
text:undefined
(否则文本输出将进入文件)

因此,可以直接从karma获得覆盖率摘要,但是当
ts
源与
karma.config.js
karma remap istanbul
在同一目录下不可用时,仍然需要进一步开发配置,以便能够生成完整的html报告

安装:

把这个放到你的karma.conf.js中:

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

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

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

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

browsers: ["Chrome"]
这将动态运行Typescript单元测试,并生成如下所示的html覆盖率:

要运行上述示例,您需要安装几个软件包:

npm安装@types/jasmine-jasmine-core-karma-karma-chrome启动器karma-cli-karma-jasmine-karma-typescript


这是单元测试的完整配置,这里不需要
tsconfig.json
。对于角度、反应等更复杂的设置,您可以在和中找到示例。

您可以使用remap istanbul:我还没有找到将remap istanbul与TypeScript一起使用的好示例。对于
mocha
运行测试也非常有效
frameworks: ["jasmine", "karma-typescript"],

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

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

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

browsers: ["Chrome"]