gpt4 book ai didi

javascript - Angular 代码覆盖错误输出

转载 作者:行者123 更新时间:2023-11-29 19:31:54 25 4
gpt4 key购买 nike

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

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

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

  • 我知道 Service AController B 使用。
  • Controller B 已被测试覆盖,代码覆盖率结果将其正确标记为已被测试覆盖。
  • Service A 在测试 Controller B 时未被模拟。

我认为由于 service AController B 的测试间接调用,所以我得到了错误的结果。

有什么想法吗?我怀疑是对的吗?有没有什么办法可以让我在这方面获得准确的测试覆盖率结果?

提前致谢!

最佳答案

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

以下示例将执行 jasmine spy 而不是实际服务:

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

关于javascript - Angular 代码覆盖错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27006180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com