2015-06-16 2 views
2

Я довольно новичок в модульном тестировании в угловых, так что медведь со мной, пожалуйста!AngularJS: модульное тестирование изменений состояния ui-router

У меня есть настройка $ stateProvidor для моего приложения и вы хотите проверить, что часть маршрутизации работает правильно.

Скажем, у меня есть этот вид конфигурации:

angular.module("app.routing.config", []).config(function($stateProvider, $urlRouterProvider) { 
    $stateProvider.state("home", { 
    url: "/", 
    templateUrl: "app/modules/home/page/home_page.html", 
    controller: "HomePageController", 
    resolve: { 
     setPageTitle: function($rootScope) { 
     return $rootScope.pageTitle = "Home"; 
     } 
    } 
    }).state("somethingelse", { 
    url: "/", 
    templateUrl: "app/modules/home/page/somethingelse.html", 
    controller: "SomeThingElseController", 
    resolve: { 
     setPageTitle: function($rootScope) { 
     return $rootScope.pageTitle = "Some Thing Else"; 
     } 
    } 
    }); 
    return $urlRouterProvider.otherwise('/'); 
}); 

Я наткнулся на этот блог post о том, как настроить модульного тестирования для UI-конфигурации маршрутизатора, поэтому я попытался принять тот же подход, здесь мой тест я пробуя:

'use strict'; 
describe('UI-Router State Change Tests', function() { 
    var $location, $rootScope, $scope, $state, $templateCache; 
    beforeEach(module('app')); 
    beforeEach(inject(function(_$rootScope_, _$state_, _$templateCache_, _$location_) { 
    $rootScope = _$rootScope_; 
    $state = _$state_; 
    $templateCache = _$templateCache_; 
    $location = _$location_; 
    })); 
    describe('State Change: home', function() { 
    beforeEach(function() { 
     $templateCache.put(null, 'app/modules/home/page/home_page.html'); 
    }); 
    it('should go to the home state', function() { 
     $location.url('home'); 
     $rootScope.$digest(); 
     expect($state.href('home')).toEqual('#/'); 
     expect($rootScope.pageTitle).toEqual('Home'); 
    }); 
    }); 
}); 

при выполнении теста я получаю эту ошибку на выходе:

Error: Unexpected request: GET app/modules/home/page/home_page.html

Очевидно, что я делаю что-то неправильно здесь, поэтому любая помощь или указатели будут очень оценены.

Я столкнулся с $ httpBackend, это то, что я должен использовать здесь, поэтому, рассказывая моему тесту, чтобы ожидать запроса на страницу html, которую делает мой тест изменения состояния?

ответ

0

Это почти наверняка до частичного просмотра html (home_page.html), загружаемого асинхронно во время выполнения приложения/тестирования.

Чтобы обработать это, вы можете предварительно обработать ваши частичные части html в строки Javascript, которые затем могут быть загружены синхронно с помощью ваших тестов.

Посмотрите на karma-ng-html2js-preprocessor, который должен решить вашу проблему.

Смежные вопросы