AngularJS:使用解析函数对单元测试状态进行更改

时间:2015-06-22 15:18:33

标签: angularjs unit-testing

我在AngularJS中测试相当新,我正在尝试为我已经配置的$ stateProvider编写测试:

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

我已经编写了一个简单的测试用于检查状态转换为正确的页面,例如:

describe('State Change: home', function() {
    beforeEach(function() {
      $httpBackend.expectGET('app/modules/home/page/home_page.html').respond({});
      $templateCache.put(null, 'app/modules/home/page/home_page.html');
    });
    it('should go to the home state', function() {
      $location.url('home');
      $rootScope.$digest();
      $httpBackend.flush();
      expect($state.href('home')).toEqual('#/');
      expect($rootScope.pageTitle).toEqual('Home');
    });
  });

但我仍然坚持如何在状态配置块中测试解析setPageTitle函数。我想我现在想要的是确保函数被调用(间谍?)。我只是坚持下一步该做什么,有人可以给我任何指示吗?

由于

1 个答案:

答案 0 :(得分:1)

因此,在处理解析函数时,您尝试测试的内容有两个:注入代码或执行代码。

执行:您的当前示例已经过正确测试,因为您已经解决了路线问题,并且使用以下方式有效地更新了标题:

expect($rootScope.pageTitle).toEqual('Home');

注入:在您提供一些额外功能或功能的情况下,用例会发生变化,您将要测试控制器如何使用该功能。在这种情况下,您将要使用$ controller函数注入代码来测试$ controller如何利用和使用代码

var mockFunction = function(aValue){.....}
var testedController = $controller('HomePageController', { ..., setPageTitle: mockFunction .....});