我已经使用启用的预处理配置了我的 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
所以我认为我的测试都将被执行。
答案 0 :(得分:1)
看起来Angular使用的Typescript和Jasmine出现了问题。为测试版本启用源映射似乎可以解决此问题。
我在Angular 6.1中启用了源地图,如下所示,
转到angular.json
并在主项目中找到test
,然后添加sourceMap:true
以启用测试运行的源映射。
要在CLI中启用该功能,请运行命令--source-map
或--sm=true
Github问题链接
由于我遇到相同的问题,我不得不写这个答案,这是Google搜索上的第一个问题。
答案 1 :(得分:0)
尝试在显示为未覆盖的其中一个点添加console.log('testing123');
。如果在您运行测试时出现,您就会知道伊斯坦布尔出了问题。
但是我的猜测是你的配置有问题,而且那些测试没有在al上运行,或者测试没有像你想象的那样执行代码。
答案 2 :(得分:0)
尝试将预处理器中的内容更改为:
preprocessors: {
'**/public/js/**/*.js': ['coverage']
},
除非我在预处理器对象中使用** / before director之前的特定语法,否则我无法使报告生效。
The karma-coverage documentation包括预处理器中列出的前面的** / before目录。