AngularJS:单元测试ui-router状态的变化

时间:2015-06-16 13:36:38

标签: angularjs unit-testing karma-jasmine

我对角度的单元测试还是比较新的,请耐心等待我!

我为我的应用设置了一个$ 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('/');
});

我遇到了关于如何为ui-router配置设置单元测试的博客post,所以我尝试采用相同的方法,这是我正在尝试的测试:

'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');
    });
  });
});

运行测试时,我在输出中收到此错误:

  

错误:意外请求:GET app / modules / home / page / home_page.html

显然我在这里做错了,所以任何帮助或指示都会非常感激。

我确实遇到了$ httpBackend,这是我应该在这里使用的东西,所以告诉我的测试期望我的状态更改测试正在对html页面发出请求吗?

1 个答案:

答案 0 :(得分:0)

这几乎可以肯定是在app / test运行时期间异步加载的部分html视图(home_page.html)。

为了处理这个问题,您可以将html partials预处理为Javascript字符串,然后可以通过测试同步加载。

请查看karma-ng-html2js-preprocessor哪个可以解决您的问题。