如何通过业力和茉莉花单元测试获取angular js中的状态?

时间:2018-08-07 06:55:48

标签: angularjs unit-testing karma-jasmine

我正在AngularJs应用程序中编写单元测试。当我直接给出状态时,例如app或abc,则它可以工作,但是当我给出类似app.xyz时,则它不在单元测试文件中给出状态。

在代码下方以获取更多理解。

一切正常。

    angular.module('app.xyz', [
    'ui.router',
    'ngResource'
    ])


$stateProvider.state("state1", {
    url: "/state1",
    controller: 'abCtrl',
    template: '<h1>Hiiiiiiii</h1>'
    }).state('state2', {
    url: "/state2",
    controller: 'cargoCtrl',
    template: '<h2>Hello</h2>'
    });

TestController

describe('state changes', function() {
  beforeEach(module('app.xyz'));
  var $rootScope, $state;    
  beforeEach(inject(function(_$rootScope_, _$state_) {      
    $rootScope = _$rootScope_;
    $state = _$state_;      
  }));


  it('loads page 1', function(done) {      
    $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
      expect(toState.controller).toEqual('Controller1');
      done();
    });      

    $state.go('state1');       
    $rootScope.$apply();
  });

  it('loads page 2', function(done) {     
    $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
      expect(toState.controller).toEqual('Controller2');
      done();
    });                 

            $state.go('state2');

    $rootScope.$apply();
  });  
});
  

$ state.go('state2');它工作正常。当我打印时   控制台,然后我得到州名。

以下内容不起作用。

 $stateProvider.state("app.state1", {
url: "/state1",
controller: 'abCtrl',
template: '<h1>Hiiiiiiii</h1>'
}).state('app.state2', {
url: "/state2",
controller: 'cargoCtrl',
template: '<h2>Hello</h2>'
});

控制器

it('loads page 2', function(done) {     
    $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
      expect(toState.controller).toEqual('Controller2');
      done();
    });               

            $state.go('app.state2');

    $rootScope.$apply();
  });

上面的代码给了我未定义的状态。

据我所知,我无法获取子状态。如果我给单亲父母州,那么它正在工作。我是业力测试的新手。任何建议是
对我来说很有价值

0 个答案:

没有答案