角度代码覆盖率错误输出
Angular Code Coverage wrong output
我的堆栈是: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
相关文章:
- Datetime格式为Friendly Time.Moment JS输出错误
- 一个ajax循环有两个输出错误innerHTML
- Jasmine与Jasminece:输出错误到控制台
- 函数中输出错误的错误消息
- jQuery click()多次输出错误按钮的信息
- Javascript InnerHTML 输出错误
- 石头剪刀布蜥蜴斯波克游戏逻辑偶尔会输出错误的赢家,我不知道为什么
- JavaScript 控制台.log输出错误的数组长度
- 安装程序 prerender.io 仅从 PhantomJS 输出错误消息
- 聊天应用输出错误 - 角度.JS
- javascript中的字符串串联输出错误的结果
- Webpack输出错误的图像路径
- Google Groups API输出错误
- Gulp-remember似乎输出错误的路径
- Javascript输出错误
- 网页浏览器输出错误
- Javascript Date toJSON()输出错误的日期
- Javascript程序不断输出错误的数组索引
- D3线性色阶输出错误
- Javascript在浏览器中输出错误