jasmine angularjs testing - L'argument 'PhoneListCtrl' n'est pas une fonction, n'est pas défini

StackOverflow https://stackoverflow.com//questions/23045706

  •  21-12-2019
  •  | 
  •  

Question

Lors de l'exécution d'un test Angularjs + Jasmine + Karma, j'ai eu l'erreur suivante :enter image description here

Mon script de test est :

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

Ce code n'est qu'une copie du tutoriel officiel d'AngularJS ici :http://code.angularjs.org/1.2.0-rc.3/docs/tutorial/step_02

Voici une partie de mon fichier 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'
],

L'erreur est ListeTéléphoneCtrl pas défini, mais je crois qu'il est défini et chargé dans le code ci-dessus.Selon vous, quel est le problème ?Merci!

Était-ce utile?

La solution

La partie initialisation du module est manquante dans votre test unitaire.Tu devrais appeler module('phonecatApp') avant votre premier appel inject().Dans ce cas, votre code de test unitaire devrait ressembler à :

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

phonecatApp est le nom du module où vous avez défini votre PhoneListCtrl manette.

Le didacticiel que vous utilisez est également obsolète, il s'agit d'une version instable d'Angular (1.2.0-rc.3).Voici une version mise à jour du même tutoriel pour la dernière version d'Angular : http://docs.angularjs.org/tutorial/step_02

Autres conseils

Cela fonctionne pour moi

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top