Ger*_*don 27 javascript code-coverage typescript
我们刚刚在Typescript中启动了一个项目,我们需要获得代码覆盖率数据.
我们现有的JavaScript项目使用Grunt中的Instanbul进行覆盖.我们不确定如何为TypeScript复制它.
是否有任何工具可以从TypeScript代码本身生成代码覆盖?或者我们是否针对生成的JavaScript代码运行Istanbul(或类似)工具.
Rya*_*ugh 20
在TypeScript团队中,我们只在编译的JavaScript上使用常规代码覆盖工具.我们发现这已经足够了,因为通常对于代码覆盖率,您正在考虑总覆盖率%(不会发生显着变化)或者在表达级别深度潜水(这也没有显着变化).
如果您找到了支持它的工具(我还没有意识到),理论上您可以使用编译器发出的源映射将coverage数据映射回TypeScript代码.这可能不值得麻烦.
McM*_*ath 20
现在可以使用Istanbul v1(当前处于alpha阶段)以及TypeScript节点针对TypeScript源代码运行Istanbul .
以下假设您使用Mocha作为测试框架,并且所有测试代码都在标准test/目录下.
首先,安装必需的包:
npm install --save-dev mocha ts-node
npm install --save-dev --save-exact istanbul@1.1.0-alpha.1
Run Code Online (Sandbox Code Playgroud)
然后在您的内容中包含以下内容package.json:
"scripts": {
"test": "istanbul cover -e .ts _mocha -- --compilers ts:ts-node/register"
}
Run Code Online (Sandbox Code Playgroud)
而已.跑npm test,你会被覆盖.
有关一个工作示例,请参阅我的Deep Map项目,其中测试文件与源代码保存在同一目录中.以下是HTML输出的示例:
Jes*_*sen 13
这个问题最初发布两年后,现在remap-istanbul看起来很有希望.
您可以在Sitepen中阅读有关它的更多信息:TypeScript和其他透明语言的代码覆盖率
正如他们在Github项目中所写:
一个软件包,可以根据JavaScript Source Maps v3将Istanbul代码覆盖率信息重新映射到其原始源位置.
当我阅读文档时,项目将根据源图将您的伊斯坦布尔生成的覆盖作为转换输入.这听起来像是一个额外的步骤,但我相信它会有所帮助,以便您可以在覆盖率报告中摆脱那些已转换的自动生成的行.
我相信这正是你所需要的.
针对生成的javascript运行代码覆盖率.你甚至可以通过告诉伊斯坦布尔忽略打字稿所写的那些令人讨厌的不可接听的行来达到100%的覆盖率.
伊斯坦布尔尊重/*istanbul忽略下一个*/的评论,所以我所做的是在我的gulp任务中运行一个字符串替换,将istanbul忽略注释注入到TypeScript写入的自动生成的包装器代码中.
这是gulp任务:
var gulp = require('gulp'),
replace = require('gulp-replace'),
ts = require('gulp-typescript'),
gulp.task('scripts', function () {
//compile typescript into javascript
gulp.src('src/**/*.ts')
.pipe(ts({
declarationFiles: false,
removeComments: false
}))
//write comments to tell istanbul to ignore the code inside the iife parameters
.js.pipe(replace(/(}\)\()(.*\|\|.*;)/g, '$1/* istanbul ignore next */$2'))
//write comments to tell istanbul to ignore the extends code that typescript generates
.pipe(replace(/(var __extends = \(this && this.__extends\))/g, '$1/* istanbul ignore next */'))
//write all of the compiled javascript files to a build folder so we can use them for tests and coverage
.pipe(gulp.dest('dist/src'))
//...the rest of your build process
});
Run Code Online (Sandbox Code Playgroud)
这是生成的代码.
var __extends = (this && this.__extends)/* istanbul ignore next */ || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
var animalApi;
(function (animalApi) {
var dogs;
(function (dogs) {
var BlackLab = (function (_super) {
__extends(BlackLab, _super);
//class code...
});
dogs.BlackLab = BlackLab;
})(/* istanbul ignore next */dogs = animalApi.dogs || (animalApi.dogs = {}));
})(/* istanbul ignore next */animalApi || (animalApi = {}));
Run Code Online (Sandbox Code Playgroud)
您可以使用放肆为
使用Chutzpah,您可以从命令行运行测试,并将您的测试与Visual Studio Test Explorer集成.
Chutzpah允许您决定是否要从.ts文件,.js文件,.html文件或所有文件运行测试.
设置(在Visual Studio/Tools/Options/Chutzpah中)从.ts文件运行测试时,您将能够分析生成的.js文件的代码覆盖率,并在生成的JavaScript代码和.ts文件之间建立链接.生成它.
它可以很容易地处理你的TypeScript代码覆盖,即使是JavaScript代码也是真正的测试代码.
您可以从Visual Studio/Tools/Extensions和更新安装Chutzpah.
您可以在这里找到有关使用Chutzpah进行代码覆盖的更多详细信息.