Angular - Mocha - Тесты не выполняются, когда я добавляю несколько контроллеров к одному модулю

0

Когда у меня есть один контроллер, подключенный к модулю, я могу использовать mocha, karma, чтобы проверить его успешно. Но когда я добавляю два контроллера в один и тот же модуль, тесты терпят неудачу. Почему это?

У меня есть два контроллера, определенных в одном модуле. Я могу вручную протестировать контроллеры, и они работают.

src/app/itemListController.js
angular.module('lazyLoad', [])
  .controller('ItemListController', ['$scope', function ($scope) {
...
}]);

src/app/invoiceController.js
angular.module('lazyLoad', [])
  .controller('InvoiceController', ['$scope', function ($scope) {
...
}]);

И 2 единичных теста:

test/app/itemListController.mocha.js
'use strict';
describe('testing movies', function () {
  var scope;
  var fixture;

  beforeEach(module('lazyLoad'));

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

  it('....', function() {});
});

test/app/invoiceController.mocha.js
'use strict';
describe('testing movies', function () {
  var scope;
  var fixture;

  beforeEach(module('lazyLoad'));

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

  it('....', function() {});
});

Я получил:

PhantomJS 1.9.8 (Mac OS X 0.0.0) testing movies "before each" hook: workFn FAILED
    the object {
      "line": 1761
      "message": "[ng:areq] Argument 'ItemListController' is not a function, got undefined
    http://errors.angularjs.org/1.4.1/ng/areq?p0=ItemListController&p1=not%20a%20function%2C%20got%20undefined"
      "name": "Error"

Теперь, если я изменю имя модуля для invoiceController.js и invoiceController.mocha.js, чтобы сказать invoiceM, тогда оба теста работают.

Я должен делать что-то неправильно...

Теги:
mocha
karma-mocha

1 ответ

1
Лучший ответ

Вы определяете свои модули дважды. Когда вы используете скобки [] для передачи пустых зависимостей, вы фактически создаете модуль и заменяете старый, если он существует с тем же именем. Что вам нужно сделать:

// Create the module, maybe in a separate place.
angular.module('lazyLoad', []);

// Attach controllers to that module:
angular.module('lazyLoad') // HEY! SEE THIS? NO BRACKETS.
  .controller('ItemListController', ...);]

angular.module('lazyLoad') // HEY! SEE THIS? NO BRACKETS.
  .controller('InvoiceController' ...);
  • 0
    Это работало отлично! Благодарю. Я также изменил мою конфигурацию кармы так, чтобы файл, который регистрирует модуль, загружался первым. Файлы: [ 'SRC / приложение / module.js ...]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню