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

Javascript 错误:参数';MainCtrl';不是函数,未定义,javascript,unit-testing,angularjs,Javascript,Unit Testing,Angularjs,我刚刚安装了Yeoman并创建了我的第一个项目。我正试着对Yo创建的默认角度项目进行单元测试。当我调用“grunt服务器”时,项目运行良好,但当我运行单元测试“grunt测试:单元”时,我得到了错误“参数'MainCtrl'不是函数,未定义” 要使此测试正常运行,我缺少什么 再次感谢 --控制器 'use strict'; angular.module('myApp') .controller('MainCtrl', function ($scope) { $scope.awesomeThin

我刚刚安装了Yeoman并创建了我的第一个项目。我正试着对Yo创建的默认角度项目进行单元测试。当我调用“grunt服务器”时,项目运行良好,但当我运行单元测试“grunt测试:单元”时,我得到了错误“参数'MainCtrl'不是函数,未定义”

要使此测试正常运行,我缺少什么

再次感谢

--控制器

'use strict';

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

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

如果我复制并粘贴这段代码,它的执行不会出现问题。您收到的错误消息表明喷油器不知道控制器(名称)。您是否忘记在karma.conf.js中包含控制器javascript文件?

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

错误:[ng:areq]参数“MainCtrl”不是函数,未定义
http://errors.angularjs.org/1.4.7/ng/areqp0=MainCtrl&p1=not%20a%20function%2C%20got%20undefined


一旦我删除了这个文件,一切正常。我花了很长时间才弄清楚哪里出了问题,但最终找到了原因。

您好,在我的karma.conf中,我有包含控制器和测试的文件夹的wilcards。我是不是缺少了一种依赖?文件:['app/bower_components/angular/angular.js','app/bower_components/angular mocks/angular mocks.js','app/scripts/*.js',JASMINE,JASMINE_ADAPTER','test/spec/controllers/*.js',是否使用:angular.module('myApp',[])定义模块myApp我在单元测试中定义了它。我还需要在其他地方定义它吗?它在这一行失败:MainCtrl=$controller('MainCtrl',{$scope:scope});在单元测试中。这些文件包含在conf文件中。不确定还需要检查什么。您已发布控制器文件。将angular.module('myApp')替换为angular.module('myApp',[])。你还出错吗?啊哈!就这样!我在引用模块。当我将代码更改为angular.module('myApp',[])时,测试正在运行。谢谢你的帮助!