1

所以我们有业力覆盖设置和我认为正在工作的东西,但生成的报告似乎并没有考虑到所有的单元测试。我们在控制器、服务等中得到了很多“未涵盖的语句”或“未涵盖的功能”,我们​​在测试中执行了代码行。

我们只是在实现这个(和单元测试),所以我确信我们缺少一些东西,所以任何帮助我们指向正确方向的帮助将不胜感激。

这是一个片段,以防我们在测试中做错了什么:

控制器

(function(){
 var simpleMod = angular.module('simpleMod', []);

 simpleMod.controller('simpleController', function($scope){
    $scope.test = "A";

    $scope.TestMethod = function()
    {
       $scope.test = "B";
    };
 });
})();

测试

describe('Test Suite', function () {
 var scope;
 var simpleController;

 beforeEach(module('simpleMod'));

 beforeEach(inject(function($controller, $rootScope) {
    scope = $rootScope.$new();

    simpleController = $controller('simpleController', {
       $scope: scope
    });
 }));

 it('Test 001', function() {
    spyOn(scope, 'TestMethod').and.callThrough();

    expect(scope.test).toEqual('A');

    scope.TestMethod();

    expect(scope.TestMethod).toHaveBeenCalled();
    expect(scope.test).toEqual('B');
 });
});

测试运行并通过,但是当我们查看覆盖率报告时,它显示“$scope.test = "A";" 这一行 例如,它没有被覆盖,方法相同。作为设置的测试是否真的不涵盖这些项目?如果是这样,是否可以提供有关我们如何不正确地进行测试的帮助?谢谢。

4

1 回答 1

1

终于发现问题了。我们正在使用 Grunt 来处理所有内容,并且我们在流程中添加了 concat 和 minify 任务。这些是在过程的后期出现的,覆盖率报告显示了运行的最后一个版本,这可能是缩小版本,因此报告不正确。

于 2016-01-11T14:52:23.797 回答