Domanda

Quando si esegue un test AngularJS + Jasmine + Karma, ho ottenuto un errore seguente: Inserisci Descrizione dell'immagine qui

Il mio script di test è:

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

Questo codice è solo una copia dal tutorial dell'Angularjs ufficiale qui: http://code.angularjs.org/1.2.0-RC.3 / Documenti / Tutorial / Step_02

Qui fa parte del mio file 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'errore è PhonelistCtrl non definire, ma credo che sia definito e caricato nel codice sopra.Quale pensi sia il problema?Grazie!

È stato utile?

Soluzione

Parte di inizializzazione del modulo manca nel test dell'unità.Dovresti chiamare module('phonecatApp') prima di chiamare la prima volta inject().Il tuo codice di test dell'unità in questo caso dovrebbe essere simile a:

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

Dove phonecatApp è il nome del modulo in cui è stato definito il controller PhoneListCtrl.

Anche tutorial che stai utilizzando è obsoleto, è per la versione instabile di Angular (1.2.0-RC.3).Ecco una versione aggiornata dello stesso tutorial per l'ultima versione di Angular: http://docs.angularjs.org/ Tutorial / Step_02

Altri suggerimenti

funziona per me

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top