Angularjs RegisterAPI funtion上角度UI网格的Jasmine测试用例

Angularjs RegisterAPI funtion上角度UI网格的Jasmine测试用例,angularjs,jasmine,karma-jasmine,Angularjs,Jasmine,Karma 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,

我正在为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) {};
};
我不知道如何为这个函数和内部私有函数编写单元测试用例

有人能帮我吗


提前感谢

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

这是有意义的——你在测试最终的输出,你没有测试“内部”——内部要么是外部lib,它们本身经过单元测试,要么是私有方法,你可以通过公共方法的不同参数来推送它们(否则它们的存在是有问题的)

如果外部动作模拟是您的目标,则只需使用间谍:

更新-服务测试样本

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测试:


那里有一整套视频——只需下载/复制代码并在本地运行即可准确查看用例Spies基本上允许您将请求插入外部服务/引用并模拟响应——因此,当您的方法调用该外部服务时,而不是实际调用该服务,相反,它将返回您的响应,因此您可以评估该方法应返回或不应返回的内容。

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

scope.myGridApi.selection.getSelectedRows();
更新

第一步

createMycontroller();//配置并注入依赖项后

第二步。编译ui网格:

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网格单元测试中发现了raise方法: 作为api文档的一部分:

注册事件时,它将:

“这项活动将得到一个.加薪和.提前做好准备 .raise.eventName()-不接受任何参数“


第4步设置您的期望值

“第一步”?您只描述了一个步骤,这是否应该是OP问题的完整解决方案?我认为接下来的步骤取决于上下文,我正在处理类似的情况,在我在测试中编译ui网格之后,我能够访问它的函数和属性。我认为了解第一步可能会有所帮助。如果以后我涵盖了我的所有范围,我将能够扩展我的答案。
scope.myGridApi.pagination.raise.paginationChanged();