繁体   English   中英

测试angularJS UI路由器解析功能

[英]Testing angularJS ui-router resolve functions

我正在使用ui路由器0.2.15和茉莉花1.3测试角度1.3(咖啡)

我的模块设置如下

angular.module('myModule', [
  'ui.router'
])

.config ($stateProvider) ->

  $stateProvider.state 'dashboard.settings.account',
    url:            '/account'
    controller:     'SettingsAccountController'
    templateUrl:    'dashboard/settings/account/account.tpl.html'
    resolve:
      phones: (Resolver) ->
        return Resolver.resolvePhones()

问题是:如何测试状态内的解析功能? 我在控制器中模拟了resolve服务,因此其他测试也可以正常工作,但是我不知道如何使用此特定功能。

您只需要在加载controller之前注入已解决的service

var phones;
    beforeEach(inject(function(Resolver){
        phones =  Resolver.resolvePhones()
    }));

现在将这部phones插入您的控制器中。

不了解CoffeeScript语法,但这是我在常规JS中测试简单路由配置的方式。

    describe('ui-router config', function() {

      var $rootScope, $state, $injector, myServiceMock, state = 'dashboard.settings.account';

      beforeEach(function() {

        module('myModule', function($provide) {
          $provide.value('Resolver', myServiceMock = {});
        });

        inject(function(_$rootScope_, _$state_, _$injector_, $templateCache) {
          $rootScope = _$rootScope_;
          $state = _$state_;
          $injector = _$injector_;
          $templateCache.put('template.html', '');//empty html content 
        })
      });

      it('should respond to URL', function() {
        expect($state.href(state)).toEqual('#/state');
      });

      it('should resolve data', function() {
        myServiceMock.resolvePhones= jasmine.createSpy('resolvePhones').andReturn('findAll');
        // for jasmine version greater than 2.0, replace "andReturn" with "and.returnValue"

        $state.go(state);
        $rootScope.$digest();
        expect($state.current.name).toBe(state);

        // Call invoke to inject dependencies and run function
        expect($injector.invoke($state.current.resolve.data)).toBe('findAll');
      });
    });

这也是我第一次测试路由配置。 如果您的服务未返回承诺,则此方法效果很好。 服务方法返回promise时,我遇到了问题。 让我知道您是否可以将其与服务返回承诺一起使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM