用于Angular UI网格的Jasmine测试用例onRegisterApi功能

时间:2015-10-06 12:25:31

标签: angularjs jasmine karma-jasmine

我正在为AngularJS UI网格编写Jasmine Unit测试。 我的控制器中有一个以下UI网格功能 的代码:

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

我不知道如何为此功能编写单元测试用例&内部私人诉讼......

任何人都可以帮我这个吗?

提前致谢!!!

2 个答案:

答案 0 :(得分:3)

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

scope.myGridApi.selection.getSelectedRows();

<强>更新

第1步。

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

步骤2.编译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网格应该在我的情况下编译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() - 不带参数“

步骤4设定您的期望

答案 1 :(得分:1)

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

它是有道理的 - 你正在测试最终输出,你没有测试“内部” - 内部是自己的单元测试的外部库,或者你可以通过公共方法的不同参数推送的私有方法(否则他们的存​​在是有问题的。)

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

更新 - 服务测试示例

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基本上允许你向外部服务/引用提出请求并模拟响应 - 所以当你的方法调用该外部服务时,而不是实际调用该服务,它将返回你的响应,因此您可以评估该方法应该返回的内容。