Angular UI grid onRegisterApi函数的Jasmine测试用例



我正在为AngularJS UI网格编写Jasmine单元测试。我有一个下面的UI网格函数在我的控制器代码:

$scope.gridOption.onRegisterApi = function(gridApi) {
$scope.gridApi.core.on.sortChanged($scope, function(grid, sortColumns) {};
gridApi.pagination.on.paginationChanged($scope, function(newPage, pageSize) {};
};

我不知道如何为这个函数写单元测试用例&内部私有函数....

有谁能帮我一下吗?

提前感谢!!

首先需要$compile ui-grid,然后是scope。这样您就可以在测试中访问gridApi方法,例如:

scope.myGridApi.selection.getSelectedRows();

步骤1。

createMycontroller(); // after you have configured and injected dependencies

步骤2。编译ui grid:

var gridContainer = "< div ui-grid="myGridOptions" ui-grid-pagination></div>";
var grid = $compile(gridContainer)(scope); // I've declared scope before as scope = $rootScope.$new();
scope.$digest();

在这个阶段ui网格应该编译在我的情况下,myGridApi是在范围

步骤3通过raise方法触发paginationChanged。

scope.myGridApi.pagination.raise.paginationChanged(); 

我在ui网格单元测试中发现了raise方法:https://github.com/angular-ui/ui-grid/blob/9d1a0b46e54983e09e0be8f89f9fac0ee74046e4/test/unit/core/factories/GridApi.spec.js#L26作为API文档的一部分:

http://ui-grid.info/docs//api/ui.grid.class: GridApi

当你注册一个事件时,它将:

"事件将得到一个。raise和。on。.raise.eventName() -不接受参数"

您不能对未在作用域上声明或可通过属性访问的方法进行单元测试。有些人使用_来命名私有方法。

这是有意义的——你在测试最终输出,你不是在测试"内部"——内部要么是外部库,它们自己进行单元测试,要么是私有方法,你可以通过公共方法的不同参数推送(否则它们的存在是值得怀疑的)。

如果外部动作模拟是你的目标,那么就使用间谍:https://www.youtube.com/watch?v=0EXBpsz9Bwc

UPDATE -服务测试示例

describe('myService', function () {
  'use strict';
  beforeEach(function () {
    // module that we are testing
    module('appServices');
  });
  it('myMethodName - should return empty array if called with null', inject(function (myService) {
    expect(myService.myMethodName(null)).toBe([]);
  }));
});

Ctrl测试:https://www.youtube.com/watch?v=sZp9Hz3bHZE .

那里有一套完整的视频-只需下载/复制代码并在本地运行即可查看确切的用例。Spies基本上允许你对外部服务/引用的请求进行劫持,并模拟响应——所以当你的方法调用外部服务时,它会返回你的响应,而不是实际调用该服务,因此你可以评估方法应该返回什么。

最新更新