14

コントローラー内には、$state.transitionTo別の状態に「リダイレクト」する機能があります。

今、私はこの機能のテストに行き詰まっています。常にエラーが発生しますError: No such state 'state-two'。どうすればこれをテストできますか? コントローラーが他の状態について何も知らないことは完全に明らかですが、どうすればこの状態をモックできますか?

いくつかのコード:


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

3 に答える 3

2

また、移行がそのように行われたことを期待したい場合

expect(state.current.name).toEqual('state-two')

次に、それが機能するscope.$apply前にする必要がありますexpect()

于 2013-09-20T19:22:50.143 に答える