Karma test failed when I inject a ui-router resolve in a controller

I've been trying to test my controller:

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;

  }

My spec

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

});

But when the test runs, I get the following error:

Error: [$injector:unpr] Unknown provider: DataResolveProvider <- DataResolve <- MyCtrl

What I have been doing wrong?

Upvotes: 0

Views: 495

Answers (1)

Zakaria
Zakaria

Reputation: 15070

In your beforeEach, add a reference to your service :

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

Upvotes: 1

Related Questions