Javascript 单元测试角度剑道网格数据源-所有代码路径
我正在为一个新的应用程序编写定制的角度指令,并使用Jasmine对它们进行单元测试。然而,我一辈子都不知道如何在剑道网格数据源上获得完整的代码覆盖率(甚至80%) 我有一个自定义角度剑道网格指令,如下所示: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
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
所以…问题是:
如何添加新测试/更改现有测试以获得完整的代码覆盖率
我该如何更改代码以使其更稳定?我对此犹豫不决,因为要使网格在动态配置下正常工作需要付出大量努力
谢谢