如何使用Istanbul、Coveralls和ts-node生成TypeScript测试覆盖率?
我来帮你搞定这个TypeScript项目的测试覆盖率问题!你之前用旧版istanbul的命令行不通,主要是因为它对TypeScript的支持不太友好,现在大家都用nyc(也就是Istanbul的官方CLI工具)来配合ts-node做TS项目的覆盖率统计了,下面是具体的解决步骤:
1. 替换旧依赖,安装必备工具
先把旧版的istanbul卸载掉,然后安装nyc和专门适配TypeScript的配置包:
npm uninstall istanbul --save-dev npm install nyc @istanbuljs/nyc-config-typescript --save-dev
(如果你的项目还没装mocha、ts-node、typescript这些基础依赖,记得先把它们也装到devDependencies里)
2. 配置nyc识别TypeScript代码
在你的package.json里新增一段nyc配置,指定要统计的文件范围和TS适配规则:
{ "nyc": { "extends": "@istanbuljs/nyc-config-typescript", "include": ["src/**/*.ts"], "exclude": ["src/**/*.spec.ts"] } }
这个配置会让nyc只统计业务代码(排除测试文件),并且自动处理TypeScript的转译逻辑。
3. 添加覆盖率测试脚本
在package.json的scripts里新增一个专门的覆盖率测试命令:
{ "scripts": { "test": "mocha -r ts-node/register src/**/*.spec.ts", "test:coverage": "nyc mocha -r ts-node/register src/**/*.spec.ts" } }
4. 运行覆盖率测试
现在直接执行下面的命令,就能同时跑测试和生成覆盖率报告了:
npm run test:coverage
执行完成后,你会在终端看到测试结果,项目根目录还会生成一个coverage文件夹,打开里面的index.html文件,就能直观看到每个TS文件的覆盖率详情(包括语句、分支、函数的覆盖情况)。
补充说明
旧版的istanbul cover命令是针对原生JavaScript设计的,没办法识别ts-node转译TypeScript的过程,所以无法正确统计TS代码的覆盖率。而nyc作为Istanbul的新一代CLI工具,专门做了对TS的支持,配合@istanbuljs/nyc-config-typescript配置包,就能完美适配你的测试流程。
内容的提问来源于stack exchange,提问作者Ole

