我正在为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) {};
};
我不知道如何为此功能编写单元测试用例&内部私人诉讼......
任何人都可以帮我这个吗?
提前致谢!!!
答案 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基本上允许你向外部服务/引用提出请求并模拟响应 - 所以当你的方法调用该外部服务时,而不是实际调用该服务,它将返回你的响应,因此您可以评估该方法应该返回的内容。