javascript - Karma 测试:测量未测试代码的覆盖率
问题描述
我已经成功地为我用 Typescript 编写的沙盒项目设置了 Karma 和 Webpack 测试。代码覆盖率指标由 Istanbul Instrumenter Loader 收集。令我困扰的是,我只报告了测试中导入的模块的覆盖率,因此报告的 100% 覆盖率实际上是一个肮脏的谎言。
寻找解决方案,我在 Istanbul Instrumenter Loader 的自述文件中找到了一段:
要为所有组件(即使对于那些您还没有测试的组件)创建代码覆盖率报告,您必须要求所有 1) 源和 2) 测试。
测试/index.js
// requires all tests in `project/test/src/components/**/index.js` const tests = require.context('./src/components/', true, /index\.js$/); tests.keys().forEach(tests); // requires all components in `project/src/components/**/index.js` const components = require.context('../src/components/', true, /index\.js$/); components.keys().forEach(components);
如果我理解正确,这个片段会遍历源目录中的所有索引文件并从中导入所有内容。我的问题是:如何正确地将这个片段翻译成 Typescript?或者是否有不需要import * from *
变通方法的更好的解决方案?
编辑
我发现了这个问题:Typescript 1.8 modules: import all files from folder。这是否意味着我需要一个index.ts
文件来导入每个模块?这意味着每次我引入一个新的模块文件时,我都必须手动将其导入添加到index.ts
? 肯定有更好的办法。
编辑 2
我也对可以为整个代码库生成覆盖率报告的其他工具持开放态度,这是它们能够应对 Typescript + Webpack + Karma + Mocha 堆栈的唯一条件。我已经尝试过nyc,但根本无法获得任何代码覆盖率。
编辑 3
这是index.js
上面翻译成打字稿的内容:
declare const require: any;
const ctx = require.context('../src', true, /\.ts$/);
ctx.keys().map(ctx);
编辑 4
现在有一个名为 karma 的插件karma-sabarivka-reporter
可以更正覆盖率统计信息。查看接受的答案以获取详细信息。
解决方案
重要的:
这个答案不能解决上述问题,它从根本上是错误的。看评论。
NYC 支持使用--all
标志覆盖未经测试的代码。假设你的test
命令package.json
是
"test": "karma start karma.conf.js",
您可以在之后测试覆盖率npm install -D nyc ts-node
,您可以添加以下命令并运行它。此命令期望源代码检查src
目录中的覆盖率。
"coverage": "nyc --all --include src --extension .ts --require ts-node/register npm test",
--all
标志用于检查所有文件的覆盖率。--extension .ts
用于检查所有 TypeScript 文件,您可以添加更多扩展名,例如--extension .ts --extension .tsx
.--include src
用于目录检查覆盖率。-- require ts-node/register
是教纽约市理解 TypeScript。
之后,您应该会看到所有 .ts 文件都包含在内。
注意:使用ts-node/register
可能会导致报告上的行号出现问题。要解决这个问题,您可能还需要注册源地图支持。
推荐阅读
- symfony - 如何在 Symfony 中创建路由事件处理程序
- r - R - 按 ID 对数据框进行分组,计算每个 ID 的开始和结束日期范围内的记录数
- python - Pandas 从具有索引列的字典列表中创建一个 DataFrame
- javascript - 使用按钮打开桌面程序?
- c - “Rust 不会将整数转换为引用”这句话是什么意思?
- internationalization - BCP 47 - 区域子标签的定义不是很清楚
- javascript - Leaflet draw:drawvertex 不删除最后插入的点
- flutter - 如何在 Flutter 中包装包含其他小部件的行而不溢出
- c# - 从 JArray 列表转换为 JObject
- vb.net - 如何设置我的应用程序以可靠地将日志记录数据写入日志文件而不减慢它的速度?