Angular - Mocha - 测试当我将多个控制器添加到同一个模块时失败

时间:2015-06-28 01:04:37

标签: javascript angularjs mocha karma-mocha

当我有一个控制器连接到模块时,我可以使用mocha,karma成功测试它。但是当我将两个控制器添加到同一个模块时,测试失败了。那是为什么?

我在同一模块上定义了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,那么两个测试都会有效。

我一定是做错了......

1 个答案:

答案 0 :(得分:1)

您可以两次定义模块。当您使用括号((num - 1) // 5) + 2 ((20 - 1) // 5) + 2 (19 // 5) + 2 3 + 2 5 传递空依赖项时,实际创建一个模块并替换旧模块(如果存在同名)。你需要做的是:

[]