我的筹码是:Angular.js,Karma,Karma-coverage(伊斯坦布尔)和Jasmine。
我一直在对我的应用程序运行代码覆盖率分析,问题,因此问题是 当实际没有任何关联的测试时,我会将服务A 标记为测试(绿色)标记。
我怀疑以下情况应该归咎于:
我认为,由于服务A 是由控制器B 的测试间接调用的,所以我得到了错误的结果。
有什么想法吗?我怀疑是对的吗?有什么方法可以解决这个问题吗?我可以在这方面获得准确的测试覆盖率结果吗?
提前致谢!
答案 0 :(得分:3)
不幸的是,这是评估代码覆盖率的方式。如果代码被执行,则认为是"覆盖"。幸运的是,你可以采取一些措施来减少一些误报。你可以嘲笑你的依赖项!
以下示例将执行jasmine间谍而不是实际服务:
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