Website-Suche

angularjs - Wie bekomme ich die Zustände in Unit-Tests zum Existieren?


Dies ist die Konfigurationsdatei für die Routen.

module SalesDashboard.Administration.Routing {

"use strict";

class RoutingConfig {

    static $inject = ["$stateProvider", "$urlRouterProvider", "$locationProvider"];

    constructor($stateProvider, $urlRouterProvider, $locationProvider) {

        $locationProvider.html5Mode(true);

        $stateProvider.
            state("main", {
                url: "/index.html"
            }).
            state("home", {
                url: "/administration/home",
                templateUrl: "components/home/home.html"
            });

       $urlRouterProvider.otherwise("/administration/home");
    }
}

angular
    .module("SalesDashboard.Administration")
    .config(RoutingConfig)
    .run(["$rootScope", "$log", ($rootScope: ng.IRootScopeService, $log: ng.ILogService) => {
        $rootScope.$on("$stateNotFound", (event, toState, toParams, fromState, fromParams, error) => {
            $log.log(event);
            $log.log(error);
        });
        $rootScope.$on("$stateChangeError", (event, toState, toParams, fromState, fromParams, error) => {
            $log.log(event);
            $log.log(error);
        });
        $rootScope.$on("$stateChangeStart", (event, toState, toParams, fromState, fromParams, error) => {
            $log.log(event);
            $log.log(error);
        });
    }]);
}

Dies ist die Spec-Datei

describe("SalesDashboard.Administration.Routing.RoutingConfig", (): void => {

    var $httpBackend: ng.IHttpBackendService;
    var $q: ng.IQService;
    var $rootScope: ng.IRootScopeService;
    var $state: ng.ui.IState;
    var $stateService: ng.ui.IStateService;
    var $timeout: ng.ITimeoutService;
    var $location: ng.ILocationService;
    var $templateCache: ng.ITemplateCacheService;

    beforeEach(() => {

        angular.mock.module(($provide: ng.auto.IProvideService): void => {
            $provide.constant("APP_LANG", { someUrl: "en-US" });
        });

        angular.mock.module("SalesDashboard.Administration");

        inject(($injector: ng.auto.IInjectorService): void => {
            $httpBackend = $injector.get("$httpBackend") as ng.IHttpBackendService;
            $q = $injector.get("$q") as ng.IQService;
            $rootScope = $injector.get("$rootScope") as ng.IRootScopeService;
            $state = $injector.get("$state") as ng.ui.IState;
            $stateService = $injector.get("$state") as ng.ui.IStateService;
            $timeout = $injector.get("$timeout") as ng.ITimeoutService;
            $templateCache = $injector.get("$templateCache") as ng.ITemplateCacheService;
            $location = $injector.get("$location") as ng.ILocationService;
        });

        $httpBackend.when("GET", "/assets/languages/locale-en-us.json").respond(null);
    });
        // some tests
    });

Das Problem, das ich habe, ist, dass beim Ausführen meiner Tests keine der States existiert und ich mir einfach nicht erklären kann, warum nicht. Wenn ich $stateService.go("main") ausführe, erhalte ich die Fehlermeldung Could not resolve 'main' from state ''. Die große Frage ist: Wie bekomme ich meine States-Konfiguration dazu, innerhalb des Kontexts meiner Tests zu existieren?