2016-07-05 11 views
0

Ich bekomme den unten angegebenen Fehler, wenn ich versuche, meine service zu injizieren.Karma: TypeError: Kann Eigenschaft "Prototyp" von undefined nicht lesen

(function() { 

    describe('Test', function() { 

     var $scope, $state, service,ctrl; 

     beforeEach(function() { 
      module('moduleApp'); 

      module(function($provide) { 
       $provide.service('AppService', service); 
      }); 

      inject(function($rootScope,$injector,$controller,AppService) { 
       $scope = $rootScope.$new(); 
       $state = $injector.get('$state'); 
       service = $injector.get('AppService'); 
       ctrl = $controller('MyCtrl', { 
        $scope: $scope, 
        $state: $state, 
        AppService: service 
       }); 
      }); 
     }); 


     it('should have a working UserSession service', function() { 
      expect(service).to.exist; 
     }); 


    }); 

}()); 

Fehler:

TypeError: Cannot read property 'prototype' of undefined 
    at Object.instantiate (bower_components/angular/angular.js:4577:82) 
    at Object.<anonymous> (bower_components/angular/angular.js:4438:24) 
    at Object.invoke (bower_components/angular/angular.js:4570:17) 
    at Object.enforcedReturnValue [as $get] (bower_components/angular/angular.js:4422:37) 
    at Object.invoke (bower_components/angular/angular.js:4570:17) 
    at bower_components/angular/angular.js:4387:37 
    at getService (bower_components/angular/angular.js:4529:39) 
    at Object.invoke (bower_components/angular/angular.js:4561:13) 
    at Context.workFn (bower_components/angular-mocks/angular-mocks.js:2524:20) 
    at window.inject.angular.mock.inject (bower_components/angular-mocks/angular-mocks.js:2496:37) 
Error: Declaration Location 
    at window.inject.angular.mock.inject (bower_components/angular-mocks/angular-mocks.js:2489:25) 
    at Context.<anonymous> (test/unit/app/views/Test.js:17:13) 

Antwort

2

Was versuchen Sie zu tun ?! Zuerst sagen Sie Karma, ein undefiniertes Objekt service als AppService zu verwenden und dann versuchen, AppService von Injektor zu bekommen und es zu service zuzuweisen? Es ist eine Schleife.

Wenn das Gerät im Test AppService ist, gibt es keine Notwendigkeit dafür:

module(function($provide) { 
    $provide.service('AppService', service); 
}); 

wenn Sie den Service benötigen, können Sie einfach tun:

inject(function($rootScope,$injector,$controller, _AppService_) { 
    $scope = $rootScope.$new(); 
    $state = $injector.get('$state'); 
    service = _AppService_; 
    ctrl = $controller('MyCtrl', { 
     $scope: $scope, 
     $state: $state, 
     AppService: service 
    }); 
}); 

und wenn das Gerät unter Test hängt von AppService ab, bauen Sie zuerst einen Schein-Service und verwenden Sie dann provide, und denken Sie daran, dass Sie es nicht erneut injizieren müssen.

+0

sollte mein Controller halten Sie die Referenz für AppService wie unten ... ctrl = $ controller ('MyCtrl', { $ scope: $ Umfang, $ Zustand: $ Zustand, AppService: service }); – Shane

+0

@Shane Ich aktualisierte meine Antwort. sieh es dir an und lass es mich wissen, wenn du immer noch Probleme hast. – Mehraban

Verwandte Themen