2014-04-13 15 views
8

Kiedy prowadzenie angularjs + Technika Jasmine + Karma, mam następujący błąd: enter image description herejaśmin angularjs testowanie - Argument 'PhoneListCtrl' nie jest funkcją, ale niezdefiniowane

Mój skrypt testu jest:

describe('PhoneCat controllers', function() { 

    describe('PhoneListCtrl', function(){ 

    it('should create "phones" model with 3 phones', inject(function($controller) { 
     var scope = {}, 
      ctrl = $controller('PhoneListCtrl', { $scope: scope }); 

     expect(scope.phones.length).toBe(3); 
    })); 
    }); 
}); 

Ten kod jest tylko kopia z oficjalnego tutoriala tutaj angularjs: http://code.angularjs.org/1.2.0-rc.3/docs/tutorial/step_02

Oto część mojego pliku karma.conf.js:

// list of files/patterns to load in the browser 
files: [ 

    'js/bower_components/angular/angular.js', 
    'js/bower_components/angular/ngular-mocks.js', 
    'js/app/controllers.js', 
    'test/unit/*.js' 
], 

Błąd jest PhoneListCtrl nie określają, ale uwierzyć, że określa się i ładowane w powyższym kodu. Jak myślisz, jaki jest problem? Dzięki!

+0

To wygląda mój plik badanej jednostki nie jest świadomy PhoneListCtrl kontrolera. Jak mam zbudować zależność? Czy ktoś może polecić dobre samouczki dotyczące kanonicznego + testowania karmy jaśminowej + karma? –

Odpowiedz

13

W teście jednostki brakuje części inicjalizującej moduł. Przed pierwszym połączeniem się z numerem inject() należy zadzwonić pod numer module('phonecatApp'). Urządzenie kod test w tym przypadku powinna wyglądać następująco:

describe('PhoneCat controllers', function() { 

    describe('PhoneListCtrl', function(){ 

    beforeEach(function() { 
     module('phonecatApp'); // <= initialize module that should be tested 
    }); 

    it('should create "phones" model with 3 phones', inject(function($controller) { 
     var scope = {}, 
      ctrl = $controller('PhoneListCtrl', { $scope: scope }); 

     expect(scope.phones.length).toBe(3); 
    })); 
    }); 
}); 

gdzie phonecatApp jest nazwą modułu, w którym zdefiniowany kontroler PhoneListCtrl.

Również samouczek, którego używasz, jest nieaktualny, dotyczy niestabilnej wersji Angular (1.2.0-rc.3). Tutaj jest zaktualizowana wersja tego samego poradnika do najnowszej wersji kątowej: http://docs.angularjs.org/tutorial/step_02

+0

Gosh ... Dziękuję bardzo, Vadim! Nigdy bym tego nie rozgryzł. –

+0

to nie działa – dopatraman

1

to działa na mnie

describe('addCatControllerTest', function() { 

    describe('addCatController', function(){ 

     beforeEach(function() { 
      module('app'); 
     }); 

     beforeEach(inject(function($controller, $rootScope){ 
      $scope = $rootScope.$new(); 
     })); 

     it('Add Cat Controller test', inject(function($controller) { 
      var scope = {}, 
       ctrl = $controller('addCatController', { $scope: scope }); 
      expect(scope.title).toBe('Add Cat'); 
     })); 
    }); 
}); 
Powiązane problemy