当我在控制器中注入ui-router解析时,Karma测试失败

时间:2016-03-11 15:37:51

标签: angularjs testing angular-ui-router jasmine karma-runner

我一直试图测试我的控制器:

app.js

angular
    .module('MyModule', [
      'ui.router'
    ]);
angular
    .module('MyModule')
    .config(configFn);

  configFn.$inject = ['$stateProvider'];

  function configFn($stateProvider){

    $stateProvider
        .state('myState',{
          url:'state',
          views: {
            'main' : {
              templateUrl: 'src/views/view.html',
              controller: 'MyCtrl',
              controllerAs: 'ctrl',
              resolve: {
                DataResolve: ['MyService', function(MyService){
                  return MyService.getData();
                }]
              }

            }
          }
        });

controller.js

angular
    .module('MyModule')
    .controller('MyCtrl', Controller);

  Controller.$inject = ['DataResolve'];

  /* @ngInject */
  function Controller(DataResolve) {

    var vm = this;

    vm.data = DataResolve;

  }

我的规格

controller_spec.js

describe('Controller', function(){

  beforeEach(module('MyModule'));

  beforeEach(inject(function($controller){
    this.myCtrl = $controller('MyCtrl');

  }));

  it('Controller should be defined', function() {
    expect(this.myCtrl).toBeDefined();
  });

});

但是当测试运行时,我收到以下错误:

错误:[$ injector:unpr]未知提供者:DataResolveProvider< - DataResolve< - MyCtrl

我做错了什么?

1 个答案:

答案 0 :(得分:1)

beforeEach中,添加对您服务的引用:

beforeEach(inject(function($controller, DataResolve){
    this.DataResolve = DataResolve;
    this.myCtrl = $controller('ParcelasController', {
          DataResolve: this.DataResolve;
    });
  }));