错误:参数'MainCtrl'不是函数,未定义

时间:2013-10-26 06:08:08

标签: javascript unit-testing angularjs

我刚刚安装了Yeoman并创建了我的第一个项目。我试图让我的头围测试由Yo创建的默认角度项目。当我调用“grunt服务器”时项目运行正常,但是当我运行单元测试“grunt test:unit”时,我得到错误“Argument'MainCtrl'不是函数,未定义”。

为了让这个测试正常运行,我缺少什么?

再次感谢

- 控制器

'use strict';

angular.module('myApp')
.controller('MainCtrl', function ($scope) {
$scope.awesomeThings = [
'HTML5 Boilerplate',
'AngularJS',
'Karma',
'mytest'
  ];
});

- unti test

 'use strict';

 describe('Controller: MainCtrl', function () {

 // load the controller's module
 beforeEach(module('myApp'));

var MainCtrl,
 scope;

  // Initialize the controller and a mock scope
 beforeEach(inject(function ($controller, $rootScope) {
  scope = $rootScope.$new();
 MainCtrl = $controller('MainCtrl', {
 $scope: scope
});
}));

it('should attach a list of awesomeThings to the scope', function () {
expect(scope.awesomeThings.length).toBe(4);
});
});

2 个答案:

答案 0 :(得分:3)

如果我复制并粘贴此代码,则执行时没有问题。您收到的错误消息表明进样器不知道控制器(名称)。您是否忘记在 karma.conf.js 中包含控制器javascript文件?

答案 1 :(得分:0)

就我而言,它是“app.js”的副本,导致同样的错误。虽然它没有在任何地方的html页面中使用,因为grunt测试包括/ ** / *模式,它被包含在内并因此复制模块的定义,可能重置从app.js加载的控制器。所以我得到的错误如下:

Error: [ng:areq] Argument 'MainCtrl' is not a function, got undefined http://errors.angularjs.org/1.4.7/ng/areqp0=MainCtrl&p1=not%20a%20function%2C%20got%20undefined

删除此文件后,一切正常。我花了很长时间才弄清楚出了什么问题,但终于找到了原因。