角度代码覆盖率错误输出

Angular Code Coverage wrong output

本文关键字:输出 错误 代码覆盖率      更新时间:2023-09-26

我的堆栈是:Angular.js,Karma,Karma-coverage (Istanbul)和Jasmine。

我一直在我的应用程序上运行代码覆盖率分析,问题,因此问题是,是我得到的服务 A 标记为被测试覆盖(绿色),而它实际上没有任何关联的测试

我怀疑以下情况是罪魁祸首:

  • 我知道服务 A控制器 B 使用。
  • 控制器 B 受测试覆盖,代码覆盖率结果将其正确标记为受测试覆盖。
  • 测试控制器 B 时未模拟服务 A

我认为由于控制器 B 的测试间接调用了服务 A,因此我得到了错误的结果。

有什么想法吗?我怀疑是对的吗?有什么方法可以解决这个问题,以便我可以在这方面获得准确的测试覆盖率结果?

提前感谢!

不幸的是,这就是评估代码覆盖率的方式。如果代码被执行,则认为它被"覆盖"。幸运的是,您可以采取一些措施来减少一些误报。你可以模拟你的依赖关系!

以下示例将执行茉莉花间谍而不是实际服务:

describe('Controller Tests', function() {
  var $scope, mockServiceA;
  beforeEach(module('app', function($provide) {
    mockServiceA = jasmine.createSpyObj('mockServiceA', ['foo']);
    $provide.value('ServiceA', mockServiceA);
  }));
  beforeEach(inject(function($rootScope, $controller) {
    $scope = $rootScope.$new();
    $controller('ControllerB', {
      $scope: $scope
    });
  }));
  describe('ControllerB', function() {
    it('should call mock service', function() {
      expect(mockServiceA.foo).not.toHaveBeenCalled();
      $scope.useServiceA();
      expect(mockServiceA.foo).toHaveBeenCalled();
    });
  });
});

这是一个工作的Plunker:http://plnkr.co/edit/x8gQQNsHT0R5n5iJSxKw?p=info