Я пытаюсь выполнить модульный тест, который проверяет, правильно ли инициализируется мой контроллер.Я продолжаю сталкиваться с ошибкой «TypeError: Невозможно прочитать свойство isImageBuilderSession of undefined».
isImageBuilderSession - это переменная, определенная в интерфейсе WindowObject, которая расширяет службу угловых окон.Переменная $ window, которая передается моему контроллеру, определяется как WindowObject.Я могу выйти из системы и увидеть, что она вводится / создается как ожидалось.Не уверен, почему его значения не определены.
ИНТЕРФЕЙС ОБЪЕКТА ОКНА:
export interface IPhotonWindowObject extends angular.IWindowService {
siteConfig: IPhotonSiteConfig;
d3: any;
cccNativeClient?: Interfaces.NativeClient;
CefSharp?: any;
}
КОНТРОЛЛЕР:
/// <reference path="../_references.d.ts"/>
"use strict";
module Controllers {
import IPromise = angular.IPromise;
import IPhotonCatalogsResponse = Interfaces.IPhotonCatalogsResponse;
import IPhotonHttpError = Interfaces.IPhotonHttpError;
import IScope = angular.IScope;
import IPhotonWindowObject = Interfaces.IPhotonWindowObject;
import IPhotonGetUserSessionResponse = Interfaces.IPhotonGetUserSessionResponse;
interface ICatalogControllerScope extends IScope {}
export class CatalogController {
public static controllerName = "CatalogController";
public static $inject = [
"$scope",
"$location",
"$window",
Constants.Photon.SERVICE_LOGGER,
Constants.Photon.SERVICE_CATALOG,
Constants.Photon.SERVICE_FEEDBACK
];
public catalogs: Array<Interfaces.IPhotonCatalog>;
private TAG = "CatalogController";
constructor(protected $scope: ICatalogControllerScope,
protected $location: angular.ILocationService,
protected $window: IPhotonWindowObject,
protected loggerService: Services.LoggerService,
protected catalogService: Services.CatalogService,
protected feedbackService: Services.FeedbackService) {
if (this.$window.siteConfig.isImageBuilderSession) {
let reference = "image-builder/" + this.$window.siteConfig.stack; // Image builder itself is considered both stack & fleet.
this.gotoReserveInstancePage(reference);
return;
}
this.catalogService.getCatalog().then((data: Interfaces.IPhotonCatalogsResponse) => {
this.catalogs = data.catalogs;
}).catch((error) => {
this.loggerService.error("CatalogController", error);
});
$scope.$on("launchApp", this.launchApp);
}
public gotoReserveInstancePage(reference: string, appId?: string) {
if(appId){
this.$location.path("/reserve").search({"reference": reference, "app": appId});
} else {
this.$location.path("/reserve").search({"reference": reference});
}
return;
}
public launchApp = (event: angular.IAngularEvent, params: Interfaces.IPhotonLaunchAppEventParam) => {
this.gotoReserveInstancePage(params.reference, params.appId);
};
} // end of class
} // end of module
angular.module(Constants.Photon.MODULE_CONTROLLER_PRE_SESSION)
.controller(Controllers.CatalogController.controllerName, Controllers.CatalogController)
ТЕСТ:
describe("Catalogs controller", function() {
beforeEach( function() {
angular.mock.module("photonServicesCommons");
});
var $controller;
var $rootScope;
var $scope;
var createController;
var window;
var $location;
var loggerService;
var catalogService;
var feedbackService;
var controller;
beforeEach(
inject( function(
_$controller_,
_$rootScope_,
_$location_
) {
$controller = _$controller_;
$rootScope = _$rootScope_;
$location = _$location_;
loggerService = jasmine.createSpyObj('logger', ['error', 'info']);
catalogService = jasmine.createSpyObj('catalogService', ['getCatalog']);
feedbackService = jasmine.createSpyObj('feedbackService', ['']);
window = jasmine.createSpyObj('window', ['']);
$scope = $rootScope.$new();
controller = $controller("CatalogController", {
$scope: $scope,
$location: $location,
$window: window,
loggerService: loggerService,
catalogService: catalogService,
feedbackService: feedbackService
});
})
);
it("Should init", function() {
// var catalogController = null;
console.log("testing window: " + $window.siteConfig );
console.log("test: " + loggerService);
// catalogController = createController();
// Just want to see if the controller is created.
expect(controller).not.toBe(null);
});
});