我已经为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


因此,我认为我的测试将全部执行。

最佳答案

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

我在Angular 6.1中启用了源地图,如下所示:

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

要在CLI中启用该功能,请使用命令--source-map--sm=true

Github问题链接


Code coverage report issue with branch coverage (if path not taken)
ng test --code-coverage in 6.1 improperly detecting branches




我不得不写这个答案,因为我遇到了同样的问题,这是Google搜索上的第一个问题。

关于karma-runner - karma 报应错误的报道,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19065792/

10-13 04:23