Prueba de jasmine angularjs: el argumento 'PhoneListCtrl' no es una función, no está definido

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

  •  21-12-2019
  •  | 
  •  

Pregunta

Al ejecutar una prueba de angularjs + Jasmine + Karma, recibí el siguiente error:enter image description here

Mi script de prueba es:

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

Este código es solo una copia del tutorial oficial de AngularJS aquí:http://code.angularjs.org/1.2.0-rc.3/docs/tutorial/step_02

Aquí está parte de mi archivo 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'
],

El error es ListaTeléfonoCtrl No lo defino, pero creo que está definido y cargado en el código anterior.¿Cuál crees que sea el problema?¡Gracias!

¿Fue útil?

Solución

Falta la parte de inicialización del módulo en la prueba unitaria.Deberías llamar module('phonecatApp') antes de llamar por primera vez inject().Su código de prueba unitaria en este caso debería verse así:

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

dónde phonecatApp es el nombre del módulo donde definiste tu PhoneListCtrl controlador.

Además, el tutorial que estás utilizando está desactualizado, es para la versión inestable de Angular (1.2.0-rc.3).Aquí hay una versión actualizada del mismo tutorial para la última versión de Angular: http://docs.angularjs.org/tutorial/step_02

Otros consejos

Esto funciona para mí

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top