Javascript 单元测试角度剑道网格数据源-所有代码路径

Javascript 单元测试角度剑道网格数据源-所有代码路径,javascript,angularjs,unit-testing,jasmine,Javascript,Angularjs,Unit Testing,Jasmine,我正在为一个新的应用程序编写定制的角度指令,并使用Jasmine对它们进行单元测试。然而,我一辈子都不知道如何在剑道网格数据源上获得完整的代码覆盖率(甚至80%) 我有一个自定义角度剑道网格指令,如下所示: function customKendoGrid() { return { scope: { hiPageSize: "=" }, template: "<div kendo-grid k-options='gridOptions' k-ng

我正在为一个新的应用程序编写定制的角度指令,并使用Jasmine对它们进行单元测试。然而,我一辈子都不知道如何在剑道网格数据源上获得完整的代码覆盖率(甚至80%)

我有一个自定义角度剑道网格指令,如下所示:

function customKendoGrid() {
  return {
    scope: {
        hiPageSize: "="
    },
    template: "<div kendo-grid k-options='gridOptions' k-ng-delay='gridOptions'></div>",
    controller: "hiKendoGridCtrl"
  };
}
function hiKendoGridCtrl($scope, $http, hiKendoGridSvc) {
  var initialData = {
    page: 1,
    pageSize: 2,
    type: "initial"
  };
  if(angular.isUndefined($scope.initialLoad)){
    $scope.initialLoad = true;
  }
  var firstPageData = hiKendoGridSvc.getFirstPage(initialData);
  firstPageData.then(function (result) {
    var columnSet = result.ColumnSet;
    var dataModel = result.Model;
    var GridModel = kendo.data.Model.define(dataModel);
    var firstPage = result.Data;
    var totalResults = result.Total;
    $scope.gridOptions = {
        dataSource: {
            schema: {
                data: "Data",
                total: function () { return totalResults; }, // NOT COVERED
                model: GridModel
            },
            transport: {
                read: function (options) {
                    if ($scope.initialLoad) {// NOT COVERED
                        $scope.initialLoad = false;// NOT COVERED
                        options.success({ Data: firstPage });// NOT COVERED
                    } else {
                        var requestData = {// NOT COVERED
                            page: options.data.page,
                            pageSize: options.data.pageSize,
                            type: "page"
                        };
                        $http({ method: 'POST', url: 'Home/DataSourceResult', data: requestData }).success(
                            function (data) {
                                options.success(data);// NOT COVERED
                            }).error(
                            function (data, status, headers, config) {
                                console.log(data);// NOT COVERED
                                console.log(status);// NOT COVERED
                                console.log(headers);// NOT COVERED
                                console.log(config);// NOT COVERED
                            });
                    }
                }
            },
            serverPaging: true,
            pageSize: $scope.hiPageSize
        },
        scrollable: true,
        pageable: {
            input: true,
            numeric: false,
            refresh: true
        },
        editable: true,
        columns: columnSet,
        sortable: true,
        groupable: true
    };

  });
}
以上解释

对服务器进行初始调用以获取所有网格配置(架构、列、第一页数据和总计)。所有后续调用都使用不同的post参数转到同一URL,只是从服务器检索一页数据

我的问题是,我似乎找不到方法来遍历上面在注释中显示为“未覆盖”的代码路径

我在单独的单元测试中调用了网格和控制器,但似乎无法获得剑道网格来编译和调用上面的不同路径

我目前对控制器和指令的两项测试是:

控制器

beforeEach(inject(function($http){
    ctrl = $controller("hiKendoGridCtrl", {
         $scope: $scope,
         $http: $http,
         hiKendoGridSvc: hiKendoGridSvcMOCK
    });
    $scope.$digest();
}));
这样,我就可以为控制器断言所有类型的内容,包括定义正确的“$scope.gridOptions”

指令测试 //我将范围设置为newrootscope,并在本测试的beforeach中设置compile=$compile。 它(“应该输出正确的HTML”,函数(){ 捕快({ 数据来源:responseDataMOCK }); 元素=“”; 元素=编译(元素)(范围); 范围。$digest(); expect(元素[0].innerHTML).toContain(“”); }

但这并没有捕获上面控制器中的上述描述

我也尝试过一些我觉得古怪的东西,但有些类似于:

// Execute the above directive test compiling my custom directive to a kendo directive
it("Should have the correct scope", function() {
                var gridElement = '<div kendo-grid k-options="gridOptions"></div>';
                gridElement = compile(gridElement)($scope);
                console.log($scope);
                console.log(gridElement);
            });
//执行上述指令测试,将我的自定义指令编译为剑道指令
它(“应该具有正确的范围”,function(){
var gridElement='';
gridElement=编译(gridElement)($scope);
console.log($scope);
log(gridElement);
});
所以我想也许我可以在scope上获得GridOptions,然后手动编译kendo指令,但这不会导致
gridElement
有任何innerHTML

所以…问题是:

如何添加新测试/更改现有测试以获得完整的代码覆盖率

我该如何更改代码以使其更稳定?我对此犹豫不决,因为要使网格在动态配置下正常工作需要付出大量努力

谢谢