Angular CLI - 获取包含所有来源的覆盖率报告

Posted

技术标签:

【中文标题】Angular CLI - 获取包含所有来源的覆盖率报告【英文标题】:Angular CLI - Get coverage report to include all sources 【发布时间】:2019-02-05 18:01:38 【问题描述】:

我试图弄清楚如何将我的所有 .ts 源包含在从 angular CLI 生成的覆盖率报告中。目前,我只覆盖具有相关规范和测试的文件。

我尝试将includeAllSources 标志添加到我的 karma.conf.js 文件中,但这没有任何区别。

这里的正确方法是什么?我正在使用 Angular CLI 6.1.5

谢谢

【问题讨论】:

我已经更新了 angular.json 中的 sourceRoot,它对我有用。 【参考方案1】:

Solution provided by Narm 确实很棒,但仍然不理想,因为至少需要手动导入所有延迟加载的模块 + 根模块到测试,而且在大型项目中,几乎总是有一些未使用/被遗忘的组件不是任何生产代码的一部分,并且将永远留在源代码中未经测试/未被发现。

解决方案:

https://github.com/kopach/karma-sabarivka-reporter。

要使用它→安装npm install --save-dev karma-sabarivka-reporter

并更新karma.conf.js,如此处所述https://github.com/kopach/karma-sabarivka-reporter#-usage

在此之后 - 所有匹配模式的文件都将包含在最终覆盖结果中

【讨论】:

这很好用。我必须将require('karma-sabarivka-reporter') 添加到karma.conf.js 中的plugins 数组才能使其工作。线路覆盖范围从 434/4201 变为 38/6589,这有点奇怪,因为覆盖的线路不应该改变。但是,当我 cloc src/app 我的应用程序时,它会显示 11,745 行 TypeScript。所以看起来还有很多 LOC 没有被计算在内。 @alexraasch,请确保您的配置不包含“太多”。只应包含所需的源代码文件。请参阅插件自述文件页面的使用部分。至于 LOC - 试试 karma-html-reporter,并查看生成的 HTML 报告以查看究竟添加了哪些内容。 好奇人们是如何用玩笑来处理这个问题的? jest.config 文件中有点类似?【参考方案2】:

在 Angular(v6) 上对我有用的最简单的解决方案是添加一个 app.module.spec.ts 文件来补充您的 app.module.ts 并在该 .spec 中包含以下代码

import './app.module';

显然,由于app.module.ts 是您的应用程序的根,包括该模块的 .spec 将导致在代码覆盖期间包含您的所有文件 (ng test --code-coverage)

【讨论】:

在我的 Angular 8 项目中使用了与上述答案相同的解决方法。对于每个延迟加载的模块,我添加了一个类似于 app.module.spec.ts 的单独测试文件。 我有一个小型 Angular 库。在test.ts 的末尾,我添加了一个导出:export * from './public-api';

以上是关于Angular CLI - 获取包含所有来源的覆盖率报告的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖 Angular-CLI 项目中的 node_module 错误类型?

Angular CLI 常用命令

使用 angular-cli 进行 CSS 编译

Angular中伊斯坦布尔覆盖报告中的标记异常

angular2-cli 包含自定义字体

在我将 exclude 包含在 angular-cli.json 中后,规范文件正在被检查