Как смоделировать ng-grid при юнит-тестировании контроллера
В настоящее время я пытаюсь написать тесты для существующих блоков кода и сталкиваюсь с проблемой с контроллером, который имеет вложенную сетку ng внутри него. Проблема исходит от контроллера, пытающегося взаимодействовать с сеткой при инициализации.
Тестирование программного обеспечения
[email protected]
[email protected]
[email protected]
[email protected]
Мой тест:
define(["angularjs", "angular-mocks", "jquery",
"js/3.0/report.app",
"js/3.0/report.controller",
"js/3.0/report.columns"
],
function(angular, ngMocks, jquery, oARModule, oARCtrl, ARColumns) {
"use strict";
describe("Report Center Unit Tests", function() {
var oModule;
beforeEach(function() {
oModule = angular.module("advertiser_report");
module("advertiser_report");
});
it("Advertiser Report Module should be registered", function() {
expect(oModule).not.toBeNull();
});
describe("Advertiser Report Controller", function() {
var oCtrl, scope;
beforeEach(inject(function($rootScope, $controller, $compile) {
var el = document.createElement('div');
el.setAttribute('ng-grid','gridOptions');
el.className = 'gridStyle';
scope = $rootScope.$new();
$compile(el)(scope);
oCtrl = $controller('ARController', {
$scope: scope
});
}));
it("Advertiser Report controller should be registered", function() {
expect(oCtrl).not.toBeNull();
});
});
});
});
Вы увидите, где я пытался создать и скомпилировать элемент с атрибутом ng-grid. Без этого я получаю следующую ошибку:
Ошибка типа: не удается прочитать свойство 'столбцы' неопределенного
Что является результатом попытки контроллера вызвать такие вещи, как
$ Scope.gridOptions. $ GridScope.columns.each
Поэтому я добавил создание div с атрибутом ng-grid и получил новую ошибку:
TypeError: Невозможно установить свойство 'gridDim' из неопределенного
Итак, я попытался добавить scope.gridOptions перед вызовом $ controller, но это вернуло меня к исходной ошибке. Я искал способ сделать эту работу без переписывания контроллера и / или шаблонов, так как они в настоящее время работают правильно в производстве.