Жасмин Angularjs Тестирование - Аргумент «PhonelistCtrl» не является функцией, получила неопределенную

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

  •  21-12-2019
  •  | 
  •  

Вопрос

При запуске Angularjs + Jasmine + Carma 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);
    }));
  });
});
.

Этот код - это только копия из официального учебника Angularjs здесь: http://code.angularjs.org/1.2.0-rc.3 / DOCS / Учебник / step_02

Вот часть моей файла 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'
],
.

Ошибка PHONELISTCTRL не определяет, но я верю, что он определяется и загружен в приведенный выше код.Как вы думаете, проблема?Спасибо!

Это было полезно?

Решение

Инициализация модуля отсутствует в вашем тесте вашего устройства.Вы должны позвонить в module('phonecatApp'), прежде чем вы впервые звоните в inject().Ваш тестовый код устройства в этом случае должен выглядеть следующим образом:

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 - это имя модуля, где вы определили контроллер PhoneListCtrl.

Также Учебное пособие, которое вы используете, устарели, это для нестабильной версии углового (1,2,0 rc.3).Вот обновленная версия того же учебника для последней версии Angular: http://docs.angularjs.org/ Учебник / step_02

Другие советы

Это работает для меня

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top