3

我已经为我的karma.conf.js配置了启用预处理功能,以获取有关我的测试代码覆盖率的报告。我已将此行添加到预处理器部分。

preprocessors: {
  'public/js/app.js': ['coverage'],
  'public/js/filters.js': ['coverage'],
  'public/js/directives.js': ['coverage'],
  'public/js/services/*.js': ['coverage'],
  'public/js/controllers/*.js': ['coverage'],
},

我得到的是一份完全错误的报告。我知道我已经为每个模块和其中的功能编写了测试。但覆盖率报告只正确显示了服务测试。

例如指令的测试。我知道我已经编写了一些测试,并且这些测试也将被执行。但报告显示我只测试了 36% 的代码行。

覆盖报告

这种奇怪行为的原因可能是什么?

更新:

我从规范记者那里看到了这个输出:

Directives:
      bsTooltip:
          when the element was created:
                PASSED  - should call the popup function
      bsSwitchtext:
          when the model isBusy changes to true:
                PASSED  - should call the button method with loading
          when the model isBusy changes to false changes:
                PASSED  - should call the button method with loading

所以我认为我的测试将全部执行。

4

3 回答 3

2

Angular 使用的 Typescript 和 Jasmine 似乎存在问题。为测试构建启用源映射似乎可以解决此问题。

我在 Angular 6.1 中启用了源映射,如下所示,

转到angular.json并在主项目中,找到test并添加sourceMap:true以启用测试运行的源映射。

要在 CLI 中启用它,请使用命令运行--source-map--sm=true

Github 问题链接

  1. 分支覆盖率的代码覆盖率报告问题(如果未采用路径)
  2. ng test --code-coverage 6.1 不正确地检测分支

我有义务写这个答案,因为我有同样的问题,这是谷歌搜索的第一个问题。

于 2018-08-18T19:08:09.837 回答
0

尝试将预处理器中的内容更改为:

preprocessors: {
  '**/public/js/**/*.js': ['coverage']
},

除非我在预处理器对象中的导向器之前遵循带有 **/ 的特定语法,否则我无法使报告工作。

业力覆盖文档包括前面的 **/ 在预处理器中列出的目录之前。

基于这个 SO 答案。

于 2014-05-26T17:45:52.447 回答
0

尝试console.log('testing123');在显示为未涵盖的点之一处添加 a。如果它在您运行测试时出现,您就知道伊斯坦布尔出了问题。

但是我的猜测是,要么你的配置有问题,这些测试根本没有运行,要么测试没有像你想象的那样执行代码。

于 2013-09-28T10:40:14.263 回答