angularjs – 使用$state.transitionTo的单元测试控制器

前端之家收集整理的这篇文章主要介绍了angularjs – 使用$state.transitionTo的单元测试控制器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在控制器内,我有一个使用$state.transitionTo来“重定向”到另一个状态的功能.

现在我被困在测试这个功能,我总是错误错误:没有这样的状态’状态二’.我该怎么测试呢?对于我来说,控制器并不了解其他国家的任何信息,但是我如何模拟这个状态呢?

一些代码

angular.module( 'mymodule.state-one',[
  'ui.state'
])

.config(function config($stateProvider) {
  $stateProvider.state('state-one',{
    url: '/state-one',views: {
      'main': {
        controller: 'MyCtrl',templateUrl: 'mytemplate.tpl.html'
      }
    }
  });
})

.controller('MyCtrl',function ($scope,$state) {
    $scope.testVar = false;
    $scope.myFunc = function () {
      $scope.testVar = true;
      $state.transitionTo('state-two');
    };

  }
);
describe('- mymodule.state-one',function () {

  var MyCtrl,scope

  beforeEach(module('mymodule.state-one'));

  beforeEach(inject(function ($rootScope,$controller) {

    scope = $rootScope.$new();

    MyCtrl = $controller('MyCtrl',{
      $scope: scope
    });

  }));

  describe('- myFunc function',function () {
    it('- should be a function',function () {
      expect(typeof scope.myFunc).toBe('function');
    });

    it('- should test scope.testVar to true',function () {
      scope.myFunc();
      expect(scope.testVar).toBe(true);
      expect(scope.testVar).not.toBe(false);
    });
  });
});
免责声明:我自己没有这样做,所以我完全不知道它是否会奏效,是你以后的事情.

从我的头顶,我的脑海里有两个解决方案.

1.)在你的测试中,配置$stateProvider为状态2返回一个嘲笑状态这也是ui-router项目本身测试状态转换的方式.

见:https://github.com/angular-ui/ui-router/blob/04d02d087b31091868c7fd64a33e3dfc1422d485/test/stateSpec.js#L29-L42

2.)捕获并解析异常,并将其解释为满足测试,如果尝试进入状态二

第二种方法似乎非常黑客,所以我会投票选举第一.

然而,有可能我完全错了,应该休息一下.

解决方代码

beforeEach(module(function ($stateProvider) { 
  $stateProvider.state('state-two',{ url: '/' }); 
}));

猜你在找的Angularjs相关文章