0

モジュールに 1 つのコントローラーを接続すると、mocha、karma を使用して正常にテストできます。しかし、同じモジュールに 2 つのコントローラーを追加すると、テストが失敗します。何故ですか?

同じモジュールで 2 つのコントローラーが定義されています。コントローラーを手動でテストでき、動作します。

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 に変更すると、両方のテストが機能します。

私は何か間違ったことをしているに違いない...

4

1 に答える 1

1

モジュールを 2 回定義します。ブラケット[]を使用して空の依存関係を渡す場合、実際にはモジュールを作成し、古いモジュールが同じ名前で存在する場合は置き換えます。あなたがする必要があるのは:

// 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' ...);
于 2015-06-28T02:10:03.310 に答える